Здравствуйте всем!
Столкнулся со следующей задачей - необходимо загрузить файл по фтп и отобразить процесс загрузки (progress грубо говоря).
Реализация загрузки файла по фтп не составила труда. Берем api-функцию FtpGetFile, аккуратно описываем все параметры и все работает. Отображать процесс загрузки решил следующим образом:
1) определяю размер файла на фтп-сервере - FtpGetFileSize
2) и в процессе закачки решил в новом потоке по таймеру определять размер файла, который постепенно увеличивается
для этого также использую 2 api функции - CreateFile и GetFileSize
И вот здесь проблема - я не могу получить дескриптор файла пока он полностью не закачается. А уже после закачки я получаю конечный размер.
Но ведь в том же Total Commander'е видно как увеличивается размер файла. Значит как-то ж этот размер можно определить во время закачки файла.
Может есть другие варианты и идеи как отобразить этот процесс?
Помогите определить размер файла
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Помогите определить размер файла
Кто мешает считать количество принятых байт руками?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: Помогите определить размер файла
Наверно не понял о чем вы говорите, но предполагаю, что вместо FtpGetFile() вы советуете использовать FtpOpenFile() и InternetReadFile().Admin писал(а):Кто мешает считать количество принятых байт руками?
Что ж ... конечно выход. Но с FtpGetFile() настолько удобно и просто!
У меня уже голова пухнет от MSDN'а. Чтоб отследить процесс по FtpGetFile() необходимо использовать InternetSetStatusCallback. И вот теперь эти удобство и простота переходят в страшный геммор, какой удар для разработчика!

Re: Помогите определить размер файла
Стукнитесь ко мне в аську 75924439, подарю класс для... Там эта проблема решена.
Re: Помогите определить размер файла
Примерный код в классе
Out:FileName Cstring(260),Static
Out File,Driver('DOS'),Pre(Out),Name(Out:FileName),Create
Record Record
S String(1000)
End
End
....
! Копировать файл по байтам
F.Open(FileDir.Name,OpenType:Read)
If F.ErrorCode
Message(F.Error)
Else
FileSize=F.Bytes()
Loop I#=1 to FileSize by Size(Out:S)
F.Read(Out:S,Size(Out:S))
Loc:Progress=I#/FileSize*100
Display(?Loc:Progress)
Add(Out,F.Bytes)
If F.ErrorCode Then Break.
End
F.Close()
Close(Out)
Out:FileName Cstring(260),Static
Out File,Driver('DOS'),Pre(Out),Name(Out:FileName),Create
Record Record
S String(1000)
End
End
....
! Копировать файл по байтам
F.Open(FileDir.Name,OpenType:Read)
If F.ErrorCode
Message(F.Error)
Else
FileSize=F.Bytes()
Loop I#=1 to FileSize by Size(Out:S)
F.Read(Out:S,Size(Out:S))
Loc:Progress=I#/FileSize*100
Display(?Loc:Progress)
Add(Out,F.Bytes)
If F.ErrorCode Then Break.
End
F.Close()
Close(Out)