Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

FileStream и idHTTP при докачке файла. [D7, WinXP]


GlooK ©   (2007-05-05 18:42:00) 

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

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". И в итоге у файла остается размер скаченного файла. А моя система устроена так, что необходимость докачки определяется по размеру.
Как мне решить данный трабл?


SlymRO   (2007-05-23 14:07:00) [1]

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;


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

UP!


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


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


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


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


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

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


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


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

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


DVM   (2007-05-05 22:49:00) [5]


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо