Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.10;
Скачать: CL | DM;

Вниз

FileStream и idHTTP при докачке файла.   Найти похожие ветки 

 
GlooK   (2007-05-05 18:42) [0]

Делаю программу, которая качает файлы и докачивает их.
Вот листинг кода:

if FileExists(xFilename) then
 begin
   hFile := TFileStream.Create(xFilename, fmOpenReadWrite);
   hFile.Position := hFile.Size;
   fSize:=hFile.Size;
 end else
 begin
   hFile:= TFileStream.Create(xFilename, fmCreate);
   fSize:=0;
 end;
HTTP.Request.ContentRangeStart:=fSize;
try
HTTP.Get(xURLFile, hFile);
except
HTTP.Free;
hFile.Free;

Так вот, фишка в том, что когда файл начинает качатся, то размер созданого файла становится равный оригинальному (хотя он ещё не скачался) - такая фишка в качалках называется "Резервирование места на диске".
Это ,казалось бы, ничего, но моя программа всегда прерывается "убиванием процесса в taskmgr". И в итоге у файла остается размер скаченного файла. А моя система устроена так, что необходимость докачки определяется по размеру.
Как мне решить данный трабл?


 
DVM ©   (2007-05-05 22:49) [1]


> Как мне решить данный трабл?

Во-первых, не убивать через таскменеджер.
Во-вторых, хранить размер еще в каком-нибудь файле-спутнике, который удалять после скачки.


 
Alexey (AZ)   (2007-05-07 15:16) [2]


> Как мне решить данный трабл?

FileFromWWW.zip.wrk -> FileFromWWW.zip
Недокаченый -> Докаченый


 
GlooK   (2007-05-10 22:57) [3]


> Во-первых, не убивать через таскменеджер.


Тогда мне надо чтобы прога нормально завершала свою работу, когда завершаешь работу Windows.
> Во-вторых, хранить размер еще в каком-нибудь файле-спутнике,
>  который удалять после скачки.


> FileFromWWW.zip.wrk -> FileFromWWW.zipНедокаченый -> Докаченый


Дело в том, что когда начинается скачка, файл в который происходит запись автоматом забивается нулями до оригинально размера. А когда прогу завершаешь некорекктно, то размер так и остается.

Как мне кажется тут проблема в стриме. Может быть это опционально отключается? (Забитие нулями)


 
GlooK   (2007-05-19 02:30) [4]

UP!


 
SlymRO ©   (2007-05-23 14:07) [5]

HTTP.OnWork:=OnDownload;

procedure TInternet.OnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
begin
 if Terminated then HTTP.Disconnect;//тута проверяем на необходимость закрыть приложение
 BeginUpdate;
 try
   Max:=HTTP.Response.ContentLength;
   Position:=AWorkCount; //Position - нужный нам параметр, сохраняем его
 finally
   EndUpdate;
 end;
end;



Страницы: 1 вся ветка

Текущий архив: 2008.02.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.021 c
15-1199980596
Черный Шаман
2008-01-10 18:56
2008.02.10
Delphi-стам платят 50 000 - 62 500 USD в мес


2-1199758661
Артем
2008-01-08 05:17
2008.02.10
TShockwaveFlash. Как записать в поток?


1-1194005184
davinchi
2007-11-02 15:06
2008.02.10
Клиент-серверное приложение, подскажите как лучше реализовать?


2-1200517261
Res
2008-01-17 00:01
2008.02.10
Unicode


1-1193526029
Вопрошающий
2007-10-28 02:00
2008.02.10
Помогите распаковать gzip