webclientを使用してZipファイルをダウンロードすると、正しくダウンロードされて保存されていないように見えますが、zipファイルは無効または破損しています。しかし、ソースzipファイルは、有効なzipファイルであるようです。c#WebClient Zipをダウンロードすると壊れます
ダウンロードコード:
using (WebClient webClient = new WebClient())
{
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync(new Uri(URL), downloadZipFilename);
}
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}
private void Completed(object sender, AsyncCompletedEventArgs e)
{
//unzip
using (ZipFile zipFile = ZipFile.Read(currentTemporaryDownloadFileUrl))
{
zipFile.ExtractAll(currentTargetFileUrl);
}
File.Delete(currentTemporaryDownloadFileUrl);
DownloadFinished(this,EventArgs.Empty);
Console.WriteLine("File finished downloading.");
}
ジップエキスが破損として起動します。
Serverコード:サーバー上の
//send file
e.Response.Connection.Type = HttpServer.Headers.ConnectionType.Close;
byte[] buffer = ReadFile(filePath);
e.Response.Body.Write(buffer, 0, buffer.Length);
のReadFileは:
public static byte[] ReadFile(string filePath)
{
// this method is limited to 2^32 byte files (4.2 GB)
FileStream fs = File.OpenRead(filePath);
try
{
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
fs.Close();
return bytes;
}
finally
{
fs.Close();
}
}
ここで何が悪いのでしょうか?あなたはcurrentTemporaryDownloadFileUrl
を使用Completed
方法をintながらdownloadZipFilename
を使用WebClient
コールで
おかげで、 クリスチャン・スチュワート
あなたは 'ReadFile'にメモリ不足することができます。 –
ダウンロードしたファイルとサーバー上のファイルを比較しましたか? –
アイデア?誰でも –