5

私はVS2012を使用しているプログラマーです。zipファイル(Winzip、filzip、またはその他のzip圧縮ルーチンで作成)を解凍してから、ファイルをzipファイルに圧縮して戻すこともできます。

これに使用するのに最適なライブラリは何ですか?ライブラリの使用方法に関するサンプルコードを教えてください。

編集

私はVB.netを使用しています、これが私のコードです:

Public Function extractZipArchive() As Boolean
    Dim zipPath As String = "c:\example\start.zip"
    Dim extractPath As String = "c:\example\extract"

    Using archive As ZipArchive = ZipFile.OpenRead(zipPath)
        For Each entry As ZipArchiveEntry In archive.Entries
            If entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then
                entry.ExtractToFile(Path.Combine(extractPath, entry.FullName))
            End If
        Next
    End Using
End Function

どのインポートステートメントを使用する必要がありますか?現在、私は以下を追加しました:

Imports System.IO
Imports System.IO.Compression

エラーが発生しました:

タイプ「ZipArchive」は定義されていません

このエラーを修正するにはどうすればよいですか?

4

5 に答える 5

3

しばらく前ですが、未回答なので、キーワードでこれをヒットした他の人のために、$0.02をそこに入れます...

VB 2012(.Net 4.5)は、System.IO.Compression(System.IO.Compression.FileSystem.dll)に、必要な処理を実行する新機能を追加しました。以前はGZipしかありませんでした。もちろん、無料のDotNetZipまたはSharpZipLibを引き続き使用できます。

ZipFileクラスには、単純な圧縮/解凍のドロップデッドを単純にする2つの静的メソッド、CreateFromDirectoryExtractToDirectoryがあります。Yoには、NoCompressionFastest、およびOptimalの圧縮の選択肢もあります。

あなたの投稿について私を驚かせたのは、アーカイブ内のファイル(アーカイブでさえ)の概念でした。ZipArchiveクラスとZipArchiveEntryクラスを使用すると、

ZipArchive:

Using zippedFile as ZipArchive = ZipFile.Open("foo.zip", ZipArchiveMode.Read)
    For Each ntry as ZipArchiveEntry In zippedFile.Entries
        Debug.Writeline("entry " & ntry.FullName & " is only " & ntry.CompressedLength.ToString)
    Next
End Using

あなたの質問は、既存のアーカイブに追加することでもありました。これで、次のように実行できます。

Using zippedFile as ZipArchive = ZipFile.Open("foo.zip", ZipArchiveMode.Update)
    zippedFile.createEntry("bar.txt", CompressionLevel.Fastest)
    ' likewise you can get an entry already in there...
    Dim ntry As ZipArchiveEntry = zippedFile.GetEntry("wtf.doc")
    ' even delete an entry without need to decompress & compress again!
    ntry.Delete() ' !
End Using

繰り返しになりますが、これは少し前のことですが、私たちの多くはまだ2012を使用しています。この変更は将来のバージョンでは行われないため、キーワード/タグ検索で誰かがヒットした場合は、今後も役立つはずです。 。

...そしてUTF-8サポートについても話しませんでした!

于 2014-04-29T16:34:05.553 に答える
2

VisualStudio2012と.NETFramework4.5を使用している場合は、新しい圧縮ライブラリを使用できます

//This stores the path where the file should be unzipped to,
//including any subfolders that the file was originally in.
string fileUnzipFullPath;

//This is the full name of the destination file including
//the path
string fileUnzipFullName;

//Opens the zip file up to be read
using (ZipArchive archive = ZipFile.OpenRead(zipName))
{
    //Loops through each file in the zip file
    foreach (ZipArchiveEntry file in archive.Entries)
    {
        //Outputs relevant file information to the console
        Console.WriteLine("File Name: {0}", file.Name);
        Console.WriteLine("File Size: {0} bytes", file.Length);
        Console.WriteLine("Compression Ratio: {0}", ((double)file.CompressedLength / file.Length).ToString("0.0%"));

        //Identifies the destination file name and path
        fileUnzipFullName = Path.Combine(dirToUnzipTo, file.FullName);

        //Extracts the files to the output folder in a safer manner
        if (!System.IO.File.Exists(fileUnzipFullName))
        {
            //Calculates what the new full path for the unzipped file should be
            fileUnzipFullPath = Path.GetDirectoryName(fileUnzipFullName);

            //Creates the directory (if it doesn't exist) for the new path
            Directory.CreateDirectory(fileUnzipFullPath);

            //Extracts the file to (potentially new) path
            file.ExtractToFile(fileUnzipFullName);
        }
    }
}
于 2012-08-18T05:57:16.073 に答える
2

おそらく参照していませんSystem.IO.Compression。そのアセンブリ参照のチェックボックスをオンにすると、エラーが解消されます。

于 2014-08-07T22:11:36.383 に答える
1

https://msdn.microsoft.com/en-us/library/system.io.compression.zipfile(v=vs.110).aspxに記載されているように

ZipFile.ExtractToDirectoryCreateFromDirectoryを使用できます

これは例です:

System.IOをインポートします

System.IO.Compressionをインポートします

モジュールModule1

サブメイン()

   Dim startPath As String = "c:\example\start"
   Dim zipPath As String = "c:\example\result.zip"
   Dim extractPath As String = "c:\example\extract"

   ZipFile.CreateFromDirectory(startPath, zipPath)
   ZipFile.ExtractToDirectory(zipPath, extractPath)

サブ終了

エンドモジュール

この関数を使用するためにSystem.IO.Compression.FileSystemを参照していることを確認してください。

于 2017-12-04T10:24:37.040 に答える
-1
    Dim fileStream As Stream = File.OpenRead("your file path")

    Using zipToOpen As FileStream = New FileStream(".......\My.zip", FileMode.CreateNew)
        Using archive As ZipArchive = New ZipArchive(zipToOpen, ZipArchiveMode.Create)
            Dim readmeEntry As ZipArchiveEntry = archive.CreateEntry("your file path")
            fileStream.CopyTo(readmeEntry.Open())
        End Using
    End Using
于 2018-02-01T14:24:08.207 に答える