Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2008, 22:25   #1
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию Проблемма про докачке файла

Здравствуйте, уважаемые.
Столкнулся с проблеммой при докачке файла... вот код:
Код:
procedure TNewThread.Execute;
const BufferSize = 1024;
var hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen,ResumePos: DWORD;
dwBufferLen,dwIndex: Cardinal;
dwBuffer:array[1..20] of char;
f: File;
sAppName,FilePath1: string;
begin
EnterCriticalSection(_cs);
if ExtractFileExt(FileName)='.exe' then begin
SetLength(FileName,Length(FileName)-1);
SetLength(FileURL,Length(FileURL)-1);
end;
FilePath1:=ExtractFilePath(Filename);
SetLength(FilePath1,Length(FilePath1)-1);
if not(DirectoryExists(FilePath1)) then CreateDir(ExtractFilePath(Filename));

   sAppName := ExtractFileName(Application.ExeName);
   hSession := InternetOpen('CheatPortal Helper', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
   try
      hURL := InternetOpenURL(hSession, PChar(fileURL),nil,0,0,0);
      try
         dwIndex  := 0;
         dwBufferLen := 20;
         if HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH,
                          @dwBuffer, dwBufferLen, dwIndex) then
            GetsSize :=StrToInt(StrPas(@dwBuffer));
         Synchronize(SetCurrent);
         AssignFile(f, FileName);

IF FileExists(FileName) then //Есть ли на диске этот файл
   begin
     Reset(f,1); //Ax, есть? Откроем!
     ResumePos := FileSize(f); //Откуда докачать
     Seek(f, FileSize(f)); //А писать будем в конец
   end else Rewrite(f,1); //А раз нет, так создадим

   if ResumePos>0 then //Если докачиваем,
     begin
          InternetSetFilePointer(hURL,ResumePos,nil,0,0); //То сместимся
          downSize:=ResumePos;
     end;

         repeat
            InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
            BlockWrite(f, Buffer, BufferLen);
            downSize:=downSize+BufferLen;
            Synchronize(SetCurrent);
         until BufferLen = 0;
         CloseFile(f);
         Progress:=1;
         Synchronize(SetProgress);
      finally
      InternetCloseHandle(hURL)
      end
   finally
   InternetCloseHandle(hSession)
   end;
LeaveCriticalSection(_cs);
end;
дело в том, что при попытке докачки, программа сначала начинает качать данные до позиции ResumePos без записи в файл, а только потом начинает скачивать и записывать в файл... по интернету поискал, у многих возникала подобная проблемма, но решения так и не нашел.
Подскажите, как решить эту проблемму?
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 22.12.2008, 14:28   #2
luman
Новичок
Джуниор
 
Регистрация: 22.12.2008
Сообщений: 1
По умолчанию

Сколько я крови на этом потерял, но всё-таки решил проблему, пусть даже и не сам
http://www.softtelecom.ru/algreg.htm
luman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемма с 3d max 9 Crivel Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 29.08.2008 23:03
проблемма сссылками CopTupoBo4Huk HTML и CSS 7 21.08.2008 22:45
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
Проблемма c if Crivel Помощь студентам 8 08.08.2008 15:28
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24