ホームページ > バックエンド開発 > Golang > ルートフォルダーを含めずにGoでディレクトリを圧縮するにはどうすればよいですか?

ルートフォルダーを含めずにGoでディレクトリを圧縮するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-25 13:16:14
オリジナル
567 人が閲覧しました

How to Zip a Directory in Go Without Including the Root Folder?

ルート フォルダーを使用しないコンテンツの圧縮

Go では、ディレクトリを圧縮するときに、アーカイブの一部としてルート フォルダーを含めるのが一般的です。 。ただし、コンテンツのみが抽出されるようにルート フォルダーを除外したい場合があります。

これを実現するには、提供した Zipit 関数に小さな変更が必要です。

header.Name = strings.TrimPrefix(path, source)
ログイン後にコピー

元のコードでは、header.Name = filepath.Join(baseDir, strings.TrimPrefix(path,source)) という行によってベース ディレクトリ名が追加されます。 (例: "dir1") をアーカイブ内のファイル名に置き換えます。これを上記のコードに置き換えると、ベースディレクトリ名が省略されます。

その結果、「.zip」ファイルを解凍すると、ルートに「dir1」フォルダが存在しない内容が得られます。

// Modified Zipit function
func Zipit(source, target string) error {
    zipfile, err := os.Create(target)
    if err != nil {
        return err
    }
    defer zipfile.Close()

    archive := zip.NewWriter(zipfile)
    defer archive.Close()

    info, err := os.Stat(source)
    if err != nil {
        return nil
    }

    // Remove the base directory name
    filepath.Walk(source, func(path string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }

        header, err := zip.FileInfoHeader(info)
        if err != nil {
            return err
        }

        // Trim the base directory name from the filename
        header.Name = strings.TrimPrefix(path, source)
        if info.IsDir() {
            header.Name += "/"
        } else {
            header.Method = zip.Deflate
        }

        writer, err := archive.CreateHeader(header)
        if err != nil {
            return err
        }

        if info.IsDir() {
            return nil
        }

        file, err := os.Open(path)
        if err != nil {
            return err
        }
        defer file.Close()
        _, err = io.Copy(writer, file)
        return err
    })

    return err
}
ログイン後にコピー

ここで、以下を使用して Zipit を呼び出すと、

Zipit("dir1/", "dir1.zip")
ログイン後にコピー

結果の ".zip" ファイルにはコンテンツのみが含まれます。抽出時にルート ディレクトリとして「dir1」フォルダーを使用せずに、「dir1」を作成します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート