Я разрабатываю многопоточное приложение для загрузки, загрузка отлично работает, если я не загружаю zip-файл: содержимое загружается, но когда я пытаюсь извлечь его, я получаю: неожиданный конец архива, я использую winrar. Но проблема актуальна для самого приложения, точнее для многопоточной загрузки (когда я использую один поток, я не получаю эту ошибку). Ну вот соответствующая часть кода:Неожиданный конец архива при извлечении загруженного архива
//Main thread Creates worker threads and starts them
for I := 1 to ThreadCount do
begin
workerThreads[i]:=TWorkerThread.Create(URL,mapFile,PosBegin,size);
PosBegin:= PosBegin + size;
end;
//Code of worker thread:
HTTP.Request.Range := Format('%d-%d',[posBegin, posBegin + size -1]);
HTTP.Get(URL,ms);
data := MapViewOfFile(mapFile, FILE_MAP_WRITE, 0 ,0, size);
copymemory(data,ms.memory,ms.size);
Что проблема в моем коде? Спасибо за ваши ответы.
Обычно, когда каждый поток переписывает друг друга, я получаю только часть файла, например, если я использую два потока, я получаю только половину файла, но я получаю все содержимое файла , поэтому я не понимаю этого, и не могли бы вы рассказать мне, как изменить смещение представления файла ?, о распределении, я создал локальный файл (без установки его размера), а затем я создал файл карты, а я установите его файл в файл. Разве этого недостаточно? Если нет, как я могу установить размер локального файла (hFile)? – Safa
Реми правильно. Ваша проблема в том, что все ваши протекторы записывают данные в одно и то же место в вашем файле. Если вы заходите и сохраняете этот файл на своем жестком диске, а затем делаете побайтовое сравнение с загружаемым вами файлом, вы увидите, что ваш файл содержит только часть желаемых данных – SilverWarior