Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.05;
Скачать: CL | DM;

Вниз

Проблема с Gauge и копированием файлов в XP.   Найти похожие ветки 

 
Boris K.   (2003-05-22 19:55) [0]

На самом деле проблема заключается в том, что при отправке по сети файла (любого) таким методом (через Handle):
TotalRead := 0;
HandleFrom := FileOpen(SourceFile,fmOpenRead or fmShareDenyNone);
HandleTo := FileCreate(DestinationFile);
FileSize := GetFileSize(HandleFrom,nil);
FileSeek(HandleFrom,0,0);
FileSeek(HandleTo,0,0);
Repeat
BytesRead := FileRead(HandleFrom,Buffer,Size);
if BytesRead > 0
BytesWritten := FileWrite(HandleTo,Buffer,BytesRead);
TotalRead := TotalRead + BytesRead;
Gauge.Progress := Trunc((TotalRead / FileSize) * 100);
Until BytesRead = 0;
...
Индикатор улетает сразу на 100%, а остальную работу делает сам Windows XP. Как дать ему по рукам, чтобы индикатор работал корректно? При приеме файлов такого не случается. Другой метод - через AssignFile, BlockRead и BlockWrite не подходит по причине нежелания открывать файл для скачивания процедурой Reset на сетевых дисках "только для чтения".Если использовать потоки, то как в них прогрессометор заасунуть? В чем моя ошибка, кто-нибудь знает? Спасибо!


 
KA_ ©   (2003-05-22 20:20) [1]

Проверь, чему равна переменная Size в

> BytesRead := FileRead(HandleFrom,Buffer, Size);



 
Boris K.   (2003-05-23 06:43) [2]

Эту переменную я передаю в функцию копирования файлов и сам устанавливаю размер - от 128 bytes до 128k. Результат не меняется! :( ProcessMessages расставлен как положено...
Мысли есть какие?


 
Anatoly Podgoretsky ©   (2003-05-23 08:24) [3]

А сообщения будет Пушкин обрабатывать?


 
KA_ ©   (2003-05-23 08:44) [4]

TotalRead := 0;
HandleFrom := FileOpen(SourceFile,fmOpenRead or fmShareDenyNone);
HandleTo := FileCreate(DestinationFile);
FileSize := GetFileSize(HandleFrom,nil);
FileSeek(HandleFrom,0,0);
FileSeek(HandleTo,0,0);
Repeat
BytesRead := FileRead(HandleFrom,Buffer,Size);
if BytesRead > 0
BytesWritten := FileWrite(HandleTo,Buffer,BytesRead);
TotalRead := TotalRead + BytesRead;
Gauge.Progress := Trunc((TotalRead / FileSize) * 100);
Application.ProcessMessages;
Until BytesRead = 0;


 
Boris K.   (2003-05-23 10:59) [5]

Я же написал - "ProcessMessages расставлены как положено" - после каждой процедуры чтения-записи. Просто для экономии места я сократил процедуру: там еще при наличии ошибок везде определено:Exception! Так как насчет основного сабжа?


 
Boris K.   (2003-05-23 16:58) [6]

Таки никто и не знает как проблему решить, а мастера?



Страницы: 1 вся ветка

Текущий архив: 2003.06.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.047 c
14-13388
Separator
2003-05-16 20:57
2003.06.05
Встроенный asm


1-13159
Cherepovets
2003-05-21 20:08
2003.06.05
Label, с регистрами!!!


14-13438
Filling
2003-05-19 15:10
2003.06.05
Как переделать программуку с C++ на Delphi?


3-13003
Jaxtor
2003-05-19 15:11
2003.06.05
Компоненты для визуализации данных


11-13112
Grande
2002-08-29 16:01
2003.06.05
MCK не компиллируется под Delphi7