ホームページ  >  記事  >  バックエンド開発  >  ルートフォルダーを含めずにGoでフォルダーコンテンツを圧縮するにはどうすればよいですか?

ルートフォルダーを含めずにGoでフォルダーコンテンツを圧縮するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-17 21:46:01692ブラウズ

How to Zip Folder Content in Go Without Including the Root Folder?

ルート フォルダーを除くフォルダーからのコンテンツの圧縮

Go では、ルート フォルダーを除外しながらディレクトリ内のコンテンツを圧縮するには、zip を使用します。 .Writer.

問題説明

元のコードは、ディレクトリ (「dir1」) の内容を「dir1.zip」に圧縮することを目的としています。ただし、解凍すると、zip ファイルはルートとして「dir1」フォルダー構造を保持します。目標は、抽出時にルート フォルダーを削除することです。

解決策

これを達成するには、zip.Writer 内の header.Name フィールドを変更する必要があります。このフィールドは、アーカイブ内のファイルの名前を決定します。元のコードでは、フィールドは次のように設定されています:

if baseDir != "" {
    header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
}

このコードでは、ファイル名に、baseDir (「dir1」) とソース ディレクトリを基準としたファイルのパス (「path/dir1」) が含まれるようになります。 )。ただし、解凍後にルート フォルダーを削除するには、baseDir:

header.Name = strings.TrimPrefix(path, source)

を省略する必要があります。この変更により、zip ファイルはアーカイブのルート直下に配置され、" dir1" フォルダーを抽出時にルートとして使用します。

結果

baseDir を省略することによりheader.Name フィールドから、「dir1」ディレクトリの内容がルート フォルダーなしで「dir1.zip」に圧縮されます。これにより、ユーザーは「dir1」フォルダーを経由せずにファイルを直接抽出できます。

以上がルートフォルダーを含めずにGoでフォルダーコンテンツを圧縮するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。