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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2010, 19:13   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию Загружает файл, грузит 200-300 байт, бросает и идёт к след. файлу. почему?

Привет всем!

Помогите найти ошибку в данном коде:
Код:
var
  i: Integer;
  FilesURL:string;
  FilesToGet:TStringList;
begin
  Result := False;
  myDir := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
  FilesURL := AdminForm.HTTPFilesEdit.Text;
  if FileExists(myDir + 'NewFiles.lst') then
  begin
    FilesToGet := TStringList.Create;
    try
      FilesToGet.LoadFromFile(myDir + 'NewFiles.lst');
    except
      Translator_MessageToLog('[Ошибка] Не удалось прочитать список файлов! Загрузка неудачна! Обновление неудачно!', '[Error] Unable to read file list! Downloading failed! Updating failed!', MainForm.log);
      MainForm.StatusBar.Panels[1].Text := Translator('', '');
      MainForm.FileProgressDesc.Caption := Translator('Файл: ', 'File: ');
      FilesToGet.Free;
      Result := False;
    end;

    for i := 0 to FilesToGet.Count - 1 do //от нуля до кол-ва строк в файле
    begin
      SendMessage(MainForm.Handle, PROGRESS_MAX, 1, FilesToGet.Count - 1); //посылаем прогрессбару макс. колво файлов
      MainForm.StatusBar.Panels[1].Text := Translator('Загрузка файлов', 'Downloading files');
      MainForm.FileProgressDesc.Caption := Translator('Файл: ' + FilesToGet.Strings[i], 'File: ' + FilesToGet.Strings[i]);

      if (not DirectoryExists(myDir + ExtractFilePath(FilesToGet.Strings[i]))) then  //если папки не существует то создаём
        ForceDirectories(myDir + ExtractFilePath(FilesToGet.Strings[i]));
      if (not HTTPGetFile(FilesURL + ExtractFileName(FilesToGet.Strings[i]), myDir + FilesToGet.Strings[i], True, MainForm, PROGRESS)) then //если файл не загружен то..
        Translator_MessageToLog('Не удалось загрузить: ' + ExtractFileName(FilesToGet.Strings[i]), 'Bad load: ' + ExtractFileName(FilesToGet.Strings[i]), MainForm.Log)
      else //иначе
        Translator_MessageToLog('Файл: ' + ExtractFileName(FilesToGet.Strings[i]) + ' успешно загружен!', 'File: ' + ExtractFileName(FilesToGet.Strings[i]) + ' succsesfly downloaded!', MainForm.log);

      SendMessage(MainForm.Handle, PROGRESS, 1, i);   //посылаем прогрессу какой файл обрабатываем
    end;
    MainForm.StatusBar.Panels[1].Text := Translator('Загрузка завершена!', 'Downloading Complited!');
    MainForm.FileProgressDesc.Caption := Translator('Файл: ', 'File: ');
    SendMessage(MainForm.Handle, PROGRESS, 1, 0);
    Translator_MessageBox('Все файлы успешно загружены!', 'All downloads succsesfly complited!', 'Успешно ;)', 'Succsesfly ;)', MB_OK or MB_ICONINFORMATION);
    FilesToGet.Free;
    Result := True;
  end
  else
  begin
    Translator_MessageToLog('[Ошибка] Список файлов ненайден! Загрузка неудачна! Обновление неудачно!', '[Error] Files-list not found! Downloading failed! Updating failed!', MainForm.log);
    Result := False;
    FilesToGet.Free;
    MainForm.StatusBar.Panels[1].Text := Translator('', '');
    MainForm.FileProgressDesc.Caption := Translator('Файл: ', 'File: ');
  end;
end;
Ошибка состоит в том что программа используя данный код качает файлы по списку из lst файла..

Проблема в том что начинает загружать файл, загружает 200-500 байт файла, бросает файл и идёт дальше по списку с тем же манёвром...
почему? где ?

Функция HttpGetFile работает нормально вот на всякий случай:
Код:
function HTTPGetFile(const FileURL,FileSaveDest:string;ShowProgress:Boolean; FormHandle:TForm; MsgForm:Cardinal):Boolean;
const
  BufferSize=1024;  //size of buffer
var
  hSession,hURL:HInternet;
  Buffer: array[0..BufferSize] of Byte;
  BufferLen:LongWord;
  Files:TFileStream;
  Header,pAppName:string;
begin
  Result:=False;
  pAppName:='AppProgram';
  Header:='User-Agent: AppProgram';
  hSession:=InternetOpen(PChar(pAppName),INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
  try
  hURL:=InternetOpenUrl(hSession,PChar(FileURL),PChar(Header),Length(header),INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD,0);

  if (hURL<>nil) then
  begin
  try
  DeleteUrlCacheEntry(PChar(FileURL));
  Files:=TFileStream.Create(FileSaveDest,fmCreate);
  repeat
    InternetReadFile(hURL,@Buffer, SizeOf(Buffer),BufferLen);
    Files.WriteBuffer(Buffer,BufferLen);
    if (ShowProgress) then
    begin
    LT:=LT+BufferLen;
    SendMessage(FormHandle.Handle,MsgForm,0,LT+BufferLen);
    end;
    until
    BufferLen= 0;
    FreeAndNil(Files);
    Result:=True;
    finally
      InternetCloseHandle(hURL);
      end;
      end;
     finally
     InternetCloseHandle(hSession);
  end;
  LT:=0;
  SendMessage(FormHandle.Handle,MsgForm,0,0);
end;
помогите найти ошибку, уже неделю мучаюсь

Последний раз редактировалось Человек_Борща; 09.08.2010 в 19:33.
Человек_Борща вне форума Ответить с цитированием
Старый 09.08.2010, 20:37   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

поможет кт-нибуть? хотя бы советом...
Человек_Борща вне форума Ответить с цитированием
Старый 10.08.2010, 09:30   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Народ отпишет кто-нибуть?
Человек_Борща вне форума Ответить с цитированием
Старый 10.08.2010, 10:36   #4
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Земляк, я бы тебе помог... но исходя из кода всё правильно. Может полностью проект дашь потестить?
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 10.08.2010, 11:06   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

спасибо за ответ!
хм если все правельно то оно как-то всеравно не правельно работает.. почему? и именно в этой процедуре...

как точно узать почему обрывается загрузка на n-ом кол-ве байт?
Человек_Борща вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему первый байт пропускает? FantomasRUS Общие вопросы Delphi 2 12.05.2010 21:36
Почему не идёт репутация? TwiX О форуме и сайтах клуба 23 11.10.2009 11:54
Акция: хостинг 200 Гб, 200 р. в месяц. Viteef Свободное общение 2 28.07.2008 23:43
записать байт файл мандарин Общие вопросы Delphi 8 09.05.2007 20:45