C#プログラムを使用してZipファイルをダウンロードしていますが、エラーが発生します
at System.IO.Compression.ZipArchive.ReadEndOfCentralDirectory()
at System.IO.Compression.ZipArchive.Init(Stream stream, ZipArchiveMode mode,
Boolean leaveOpen)
at System.IO.Compression.ZipArchive..ctor(Stream stream, ZipArchiveMode mode,
Boolean leaveOpen, Encoding entryNameEncoding)
at System.IO.Compression.ZipFile.Open(String archiveFileName, ZipArchiveMode
mode, Encoding entryNameEncoding)
at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileN
ame, String destinationDirectoryName, Encoding entryNameEncoding)
at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileN
ame, String destinationDirectoryName)
ここにプログラムがあります
response = (HttpWebResponse)request.GetResponse();
Stream ReceiveStream = response.GetResponseStream();
byte[] buffer = new byte[1024];
FileStream outFile = new FileStream(zipFilePath, FileMode.Create);
int bytesRead;
while ((bytesRead = ReceiveStream.Read(buffer, 0, buffer.Length)) != 0)
outFile.Write(buffer, 0, bytesRead);
outFile.Close();
response.Close();
try
{
ZipFile.ExtractToDirectory(zipFilePath, destnDirectoryName);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.ReadLine();
}
エラーがわかりません。誰もがこのMRに説明できますか
問題は、Unzipがアーカイブの終了を示すコード行を見つけられないため、次のいずれかです。
アーカイブが破損しています。
.Zipアーカイブではありません。
お気に入りのZipユーティリティでファイルを開くと、これらのファイルがどれであるかがわかります。
削除した古い質問から。
System.IO.InvalidDataExceptionが発生します:中央ディレクトリレコードの終わりが見つかりませんでした。
これはおそらく、渡そうとしているファイルの形式が正しくなく、Zipが失敗していることを意味します。既にハードドライブにファイルoutfile
があるので、Zipエクストラクタに組み込まれたウィンドウでそのファイルを開き、動作するかどうかを確認することをお勧めします。失敗した場合、問題は解凍コードではなく、サーバーから送信されたデータにあります。
私は同じ問題を抱えていますが、私の場合、問題は圧縮部分にあり、解凍にはありません。
圧縮中に、StreamオブジェクトとZipArchiveオブジェクトでも「Using」ステートメントを使用する必要があります。 「使用」文はアーカイブを適切に閉じ、問題なく解凍できます。
私の場合、VB.Netの作業コード:
Using zipSteramToCreate As New MemoryStream()
Using archive As New ZipArchive(zipSteramToCreate, ZipArchiveMode.Create)
' Add entry...
End Using
' Return the Zip byte array for example:
Return zipSteramToCreate.ToArray
End Using
この同じ問題が発生しました。圧縮には多くのタイプがあり、.Zipはそのタイプの1つにすぎません。 .rarなどのファイルを「解凍」しようとしていないことを確認してください。
Net.WebClient DownloadFileメソッドを呼び出すPowerShellスクリプトから同じエラーが発生したときに、このスレッドに出会ったばかりです。
私の場合、問題はWebサーバーが要求されたZipファイルを提供できず、代わりにエラーメッセージを含むHTMLページを提供し、明らかに解凍できないことでした。
その代わりに、例外ハンドラを作成して、「実際の」エラーメッセージを抽出して表示します。
他の誰かに役立つかもしれません。これに対処するには、コードに例外を追加します。
Nuget Package Managerから入手可能なSharpCompress C#.net Libraryを使用して、解凍の目的を解決しました。