Конференция "Сети" » FTP индикация закачки больших файлов [D6, WinXP]
 
  • Real © (07.04.08 15:26) [0]
    Использую NMFTP для закачки файлов на сервер. Если файл больше 2 ГБ, то наблюдается глюк индикации: процент больше 250 и идет вниз :) Код, в обработчкике отправки очередного пакета (и расчета прогресса в процентах такой):

    procedure TFMain.FTPPacketSent(Sender: TObject);
    var
     sent_kb,total_kb: int64;
     r: Extended;
     pr: byte;
    begin
     sent_kb:=Trunc(FTP.BytesSent/1024);
     total_kb:=Trunc(FTP.BytesTotal/1024);
     r:=(sent_kb*100)/total_kb;
     pr:=Trunc(r);
     Application.Title:='Upload - '+IntToStr(pr)+'%';
     FProcess.Progress.Position:=pr;
    end;



    Не могу понять, с чем связан глюк. На файлах меньше 2ГБ - все ок. Может быть компонент не расчитан на такие объемные файлы (или внутренный числовой тип ограничен) и отсюда ошибки? Кто сталкивался с таким?
  • Reindeer Moss Eater © (07.04.08 15:31) [1]
    где-то есть intеger. В нем и косяк.
  • Reindeer Moss Eater © (07.04.08 15:35) [2]
    проверь тип BytesTotal и BytesSent
  • Real © (07.04.08 20:52) [3]
    Гм... а у меня нету исходника nmftp.pas Само свойство в подсказке отображается как Integer (Delphi 6, а предельный размер на файл такой смешной :) Народ, у кого есть исходник модуля, закиньте плиз. Или может у кого есть DCU обновленной версии или вообще какой-нить продвинутый FTP-компонент по мотивам NMFTP (Indy не хотелось бы, софтина в активном использовании, новое тестирование начинать не хотелось бы, глюк только визуальный, сам upload от этого не страдает)
  • Reindeer Moss Eater © (07.04.08 21:03) [4]
    Так ведь и без исходников уже ясно, что там integer.
  • Reindeer Moss Eater © (07.04.08 21:05) [5]
    Делай подпорку сбоку.
    Если свойство имеет отрицательное значение, приводи его к беззнаковому.
  • Real © (07.04.08 22:43) [6]

    > Так ведь и без исходников уже ясно, что там integer.

    Исходник нужен для перекомпиляции с int64
  • Reindeer Moss Eater © (07.04.08 23:39) [7]
    глюк только визуальный, сам upload от этого не страдает)

    var
    i : integer; pc : pcardinal;
    begin
    i := 3000000000;
    pc := @i;
    ShowMessage(IntToStr(i) + ' ' + IntToStr(pc^));
  • Сергей М. © (08.04.08 09:14) [8]

    > Исходник нужен для перекомпиляции с int64


    У Борланда спроси.
  • clickmaker © (08.04.08 11:56) [9]
    в Indy 10 (а может уже и в 9) есть поддержка 64-битных размеров
  • Real © (08.04.08 19:41) [10]

    > в Indy 10 (а может уже и в 9) есть поддержка 64-битных размеров

    Не хочется на Indy... Ну наверное придется. А как узнать версию? В Delphi 6 какая версия Indy никто не в курсе?
  • Real © (08.04.08 19:45) [11]

    > var
    > i : integer; pc : pcardinal;
    > begin
    > i := 3000000000;
    > pc := @i;
    > ShowMessage(IntToStr(i) + ' ' + IntToStr(pc^));

    Гм, интересная мысль, надо затестить! А почему предлагаешь именно cardinal? int64 ведь круче будет? (а то завтра террабайтовые размеры пойдут еще вдруг :)
  • Reindeer Moss Eater © (08.04.08 21:41) [12]
    ShowMessage(IntToStr(SizeOf(Integer)) + ' ' + IntToStr(SizeOf(Cardinal)) + IntToStr(SizeOf(int64)) )

    ку?
  • clickmaker © (09.04.08 10:39) [13]

    > В Delphi 6 какая версия Indy никто не в курсе?

    а в принципе не важно. Можно качнуть с индейского сайта, да обновить
    в Д7 вроде 9
  • Real © (21.04.08 02:06) [14]

    Reindeer Moss Eater

    Спасибо за совет! Работает!!!
 
Конференция "Сети" » FTP индикация закачки больших файлов [D6, WinXP]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]