Go 言語のファイル操作関数を学習し、ファイルの圧縮および解凍関数を実装します。
コンピューター技術の継続的な発展に伴い、ファイル処理はプログラム開発における非常に重要なリンクとなっています。 Go言語には、さまざまなニーズに対応できるファイル操作関数が多数用意されています。この記事では、Go 言語のファイル操作関数を紹介し、これらの関数を使用してファイルの圧縮および解凍機能を実現する方法をサンプル コードを使用して示します。
まず、いくつかの一般的なファイル操作関数を理解する必要があります。 Go 言語では、主に次のファイル操作関数があります。
os.Create(name string) (*os.File, error)
: used ファイルの作成。パラメータ name
は作成されるファイルの名前で、関数は *os.File
型のポインタと error
型の値を返します。 os.Open(name string) (*os.File, error)
: ファイルを開くために使用されます。パラメータ name
は開かれるファイルの名前で、関数は *os.File
型のポインタと error
型の値を返します。 os.OpenFile(name string, flag int, perm FileMode) (*os.File, error)
: ファイルを開くか、ファイルを作成するために使用されます。パラメータ name
は開くか作成するファイルの名前、flag
はファイルを開くためのフラグ、perm
はファイルのアクセス許可、関数は、*os.File
型のポインタと error
型の値を返します。 os.Remove(name string) error
: ファイルを削除するために使用されます。パラメータ name
は削除するファイルの名前で、関数は error
型の値を返します。 io.Copy(dst Writer, src Reader) (int64 で書き込まれ、エラー エラー)
: Reader
型のデータを Writer# にコピーするために使用されます。 ## 型のデータ。パラメータ
dst はターゲット
Writer、
src はソース
Reader、関数はコピーされたバイト数と
を返します。 error値を入力します。
archive/zip パッケージと
archive/tar パッケージを導入する必要があります。これらは、それぞれ zip 形式と tar 形式のファイルを処理するために使用されます。
package main import ( "archive/zip" "io" "os" ) func zipFiles(filename string, files []string) error { zipfile, err := os.Create(filename) if err != nil { return err } defer zipfile.Close() zipwriter := zip.NewWriter(zipfile) defer zipwriter.Close() for _, file := range files { src, err := os.Open(file) if err != nil { return err } defer src.Close() dst, err := zipwriter.Create(file) if err != nil { return err } _, err = io.Copy(dst, src) if err != nil { return err } } return nil } func main() { files := []string{"file1.txt", "file2.txt", "file3.txt"} filename := "archive.zip" err := zipFiles(filename, files) if err != nil { panic(err) } }
*os.File 型ポインタ
zipfile を作成します。次に、
zip.NewWriter(zipfile) を通じて
*zip.Writer 型ポインタ
zipwriter を作成します。これは、圧縮ファイルにデータを書き込むために使用されます。次に、圧縮するファイルのリストを調べ、各ファイルを順番に開き、
zipwriter.Create(file) を通じてソース ファイルと同じ名前のファイルを作成し、データをファイルにコピーします。 。最後に、
zipwriter と
zipfile を閉じます。
package main import ( "archive/zip" "io" "os" ) func unzipFiles(filename string, dest string) error { r, err := zip.OpenReader(filename) if err != nil { return err } defer r.Close() for _, file := range r.File { rc, err := file.Open() if err != nil { return err } defer rc.Close() path := filepath.Join(dest, file.Name) if file.FileInfo().IsDir() { os.MkdirAll(path, file.Mode()) } else { f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode()) if err != nil { return err } defer f.Close() _, err = io.Copy(f, rc) if err != nil { return err } } } return nil } func main() { filename := "archive.zip" dest := "./" err := unzipFiles(filename, dest) if err != nil { panic(err) } }
zip.OpenReader(filename) で開き、ファイルの内容を読み取るための
*zip.ReadCloser 型ポインタ
r を作成します。次に、圧縮ファイル内の各ファイルを繰り返し処理し、ファイル情報に基づいてそれがディレクトリであるかファイルであるかを判断します。ディレクトリの場合は対応するディレクトリを作成し、ファイルの場合はソースファイルと同じ名前のファイルを作成し、そのファイルにデータをコピーします。
以上がGo言語のファイル操作関数を学び、ファイルの圧縮・解凍関数を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。