Помогите определить размер файла

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
mike_ch
Бывалый
Сообщения: 62
Зарегистрирован: 11 Июль 2007, 14:21
Откуда: Беларусь, Минск

Помогите определить размер файла

Сообщение mike_ch »

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

Re: Помогите определить размер файла

Сообщение Admin »

Кто мешает считать количество принятых байт руками?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
mike_ch
Бывалый
Сообщения: 62
Зарегистрирован: 11 Июль 2007, 14:21
Откуда: Беларусь, Минск

Re: Помогите определить размер файла

Сообщение mike_ch »

Admin писал(а):Кто мешает считать количество принятых байт руками?
Наверно не понял о чем вы говорите, но предполагаю, что вместо FtpGetFile() вы советуете использовать FtpOpenFile() и InternetReadFile().
Что ж ... конечно выход. Но с FtpGetFile() настолько удобно и просто!
У меня уже голова пухнет от MSDN'а. Чтоб отследить процесс по FtpGetFile() необходимо использовать InternetSetStatusCallback. И вот теперь эти удобство и простота переходят в страшный геммор, какой удар для разработчика! :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Помогите определить размер файла

Сообщение Yufil »

Стукнитесь ко мне в аську 75924439, подарю класс для... Там эта проблема решена.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Помогите определить размер файла

Сообщение Yufil »

Примерный код в классе
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)
Ответить