ネイティブ サポートなしで Golang 1.2 でパスワードで保護された ZIP ファイルを抽出する
Go 1.2 のアーカイブ/zip パッケージは基本的な ZIP 機能を提供しますが、パスワードで保護されたアーカイブを処理するメカニズムがありません。このギャップを埋めるために、推奨されるアプローチは、os/exec パッケージを利用し、7-zip などの外部ツールを利用して抽出を実行することです。
7-zip を使用してパスワードで保護された ZIP ファイルを抽出する
7-zip は、パスワードで保護された ZIP ファイルなどのアーカイブを操作するための強力なコマンドライン機能を提供します。 Go で os/exec を使用してこれを実現する方法は次のとおりです。
<code class="go">import ( "os/exec" "fmt" ) func extractZipWith7zip(zipPath, extractPath, password string) { cmdString := fmt.Sprintf("7za e %s -o%s -p%s", zipPath, extractPath, password) cmd := exec.Command("7za", strings.Fields(cmdString)...) err := cmd.Run() if err != nil { panic(err) } }</code>
サンプル プログラム
次の Go プログラムは、パスワードで保護されたファイルを作成するプロセス全体を示しています。 ZIP ファイルを作成し、7-zip を使用して解凍し、抽出されたコンテンツを確認します:
<code class="go">package main import ( "fmt" "os" "os/exec" "path/filepath" "strings" ) var ( originalText = "Sample file created" txtFilename = "name.txt" zipFilename = "sample.zip" zipPassword = "42" dirPath = "./test" srcPath = filepath.Join(dirPath, "src") extractPath = filepath.Join(dirPath, "extracted") txtPath = filepath.Join(srcPath, txtFilename) zipPath = filepath.Join(srcPath, zipFilename) ) func main() { fmt.Println("# Setup") setupTestDirectory() createSampleFile() createZipWithPassword() fmt.Println("# Extraction of password-protected ZIP...") extractZipWithPassword() verifyExtractedFile() fmt.Println("Done.") } func setupTestDirectory() { os.RemoveAll(dirPath) os.MkdirAll(srcPath, os.ModePerm) os.MkdirAll(extractPath, os.ModePerm) } func createSampleFile() { file, err := os.Create(txtPath) if err != nil { panic(err) } defer file.Close() _, err = file.WriteString(originalText) if err != nil { panic(err) } } func createZipWithPassword() { cmdString := fmt.Sprintf("7za a %s %s -p%s", zipPath, txtPath, zipPassword) cmd := exec.Command("7za", strings.Fields(cmdString)...) err := cmd.Run() if err != nil { panic(err) } } func extractZipWithPassword() { cmdString := fmt.Sprintf("7za e %s -o%s -p%s", zipPath, extractPath, zipPassword) cmd := exec.Command("7za", strings.Fields(cmdString)...) err := cmd.Run() if err != nil { panic(err) } } func verifyExtractedFile() { extractedPath := filepath.Join(extractPath, txtFilename) content, err := os.ReadFile(extractedPath) if err != nil { panic(err) } if string(content) != originalText { panic("Extracted content mismatch") } }</code>
注: 7-zip がシステムにインストールされており、システムのパスに含まれていることを確認してください。このアプローチは仕事に対するものです。
以上がネイティブサポートなしでGolang 1.2でパスワードで保護されたZIPファイルを抽出する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。