Мое приложение загружает огромные файлы, используя HttpWebRequest -> WebResponse -> Stream -> FileStream
. См. Код ниже.Загрузка файлов. Проблемы с сетью приводят к поврежденным файлам
С следующий сценарий, который мы всегда получаем поврежденные файлы:
- Начало загрузки.
- Отсоедините кабель или нажмите, чтобы приостановить процесс загрузки.
- Закройте и откройте приложение.
- Начало загрузки (начинается с точки прерывания).
- Ждут загрузка полного файла.
Проблема: загруженный файл поврежден.
Я уверен, что это обычная проблема, но я не смог выполнить поиск в Google или SOG. Пожалуйста, порекомендуйте. Что может быть причиной?
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 файла, каковы различия? Загружен ли какой-либо раздел? Имеет ли он дублированный раздел или имеет неправильный раздел? –
Ничего себе! Я должен был сделать это сначала, прежде чем задавать вопрос. Файлы двоичные. Как сделать сравнение двух двоичных файлов? –
Пробная версия Beyond Compare должна делать то, что вам нужно. –