Главная страница
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.015 c
1-13197
Спрашивающий
2003-05-27 01:27
2003.06.05
RichEdit быстрое перемещение строк из конца в начало


1-13175
zeppelin
2003-05-26 16:40
2003.06.05
Поиск в TList


1-13251
Вячеслав Белкин
2003-05-21 14:20
2003.06.05
Как вызвать SetLength из процедуры на ассемблере


14-13406
L
2003-05-16 22:58
2003.06.05
Штрих код и как с ним работать


1-13178
super_alex
2003-05-26 13:09
2003.06.05
Мигает bitmap!!! Что делать?