我的應用程序使用HttpWebRequest -> WebResponse -> Stream -> FileStream
下載大文件。見下面的代碼。正在下載文件。網絡問題導致損壞的文件
隨着下面的場景中,我們總是得到損壞的文件:
- 開始下載。
- 拔下電纜或單擊以暫停下載過程。
- 關閉並打開應用程序。
- 開始下載(從中斷點開始)。
- 等待完整文件下載。
問題:下載的文件已損壞。
我確定這是常見問題,但我沒有通過搜索或搜索它。請指教。原因是什麼?
public class Downloader
{
int StartPosition { get; set; }
int EndPosition { get; set; }
bool Cancelling { get; set; }
void Download(string[] args)
{
string uri = @"http://www.example.com/hugefile.zip";
string localFile = @"c:\hugefile.zip";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.AddRange(this.StartPosition);
WebResponse response = request.GetResponse();
Stream inputStream = response.GetResponseStream();
using (FileStream fileStream = new FileStream(localFile, FileMode.Open, FileAccess.Write))
{
int buffSize = 8192;
byte[] buffer = new byte[buffSize];
int readSize;
do
{
// reads the buffer from input stream
readSize = inputStream.Read(buffer, 0, buffSize);
fileStream.Position = this.StartPosition;
fileStream.Write(buffer, 0, (int)readSize);
fileStream.Flush();
// increase the start position
this.StartPosition += readSize;
// check if the stream has reached its end
if (this.EndPosition > 0 && this.StartPosition >= this.EndPosition)
{
this.StartPosition = this.EndPosition;
break;
}
// check if the user have requested to pause the download
if (this.Cancelling)
{
break;
}
}
while (readSize > 0);
}
}
}
當你比較2個文件有什麼區別?下載的部分是否缺少一部分?它是否有重複的部分或它是否有不正確的部分? – 2010-06-18 12:39:00
哇!在問這個問題之前,我必須先做這件事。文件是二進制的。如何比較兩個二進制文件? – 2010-06-18 12:47:19
Beyond Compare的試用版應該可以滿足您的需求。 – 2010-06-18 13:09:40