Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Закончилась ли операция чтения\записи [XP]


petvv ©   (2011-04-21 09:12:00) 

В программе разархивирую файл

DecompressFile(FullPath,ExtractFilePath(paramstr(0))+'TRK\Temp1.db',False,True,Nil,0,100,'');  

//          sleep(2000);          

MoveFile(PChar(FullPath),PChar(ExtractFilePath(paramstr(0))+'ARCHIV\'+ExtractFileName(FullPath)));


Разархивация происходит нормально, но если опустить sleep то следующая инструкося не выполняется или выполняется не всегда, похоже винда не успевает закончить работу с архивом.

Вот собственно вопрос, как это отследить, что файлик освободился, а то со слипом чёто как то криво.


oldman   (2011-04-21 10:29:00) [1]


> if progress<>nil then needProgress:=true;
> if needprogress then


круто!!!


petvv   (2011-04-21 10:25:00) [2]

нет не одно и тоже, но это не означает, что такую конструкосю я не пробовал


oldman   (2011-04-21 10:08:00) [3]


> petvv   (21.04.11 10:01) [6]


По твоему

fun1();
fun2();


и

if fun1() then fun2();

одно и тоже?


brother   (2011-04-21 10:03:00) [4]

> if refreshWnd then
>    Application.ProcessMessages;

попробуй закомментировать эту строчку и без слипа попробовать...


petvv   (2011-04-21 10:01:00) [5]


> if DecompressFile(FullPath,ExtractFilePath(paramstr(0))+'TRK\Temp1.
> db',False,True,Nil,0,100,'') then  MoveFile(PChar(FullPath),
> PChar(ExtractFilePath(paramstr(0))+'ARCHIV\'+ExtractFileName(FullPath)));
> ???

я про это и писал, что если опустить слип, то перемещение не происходит читай первый пост


oldman   (2011-04-21 09:46:00) [6]

и в функции твоей, имхо, result:=true; не там стоит...


oldman   (2011-04-21 09:44:00) [7]

if DecompressFile(FullPath,ExtractFilePath(paramstr(0))+'TRK\Temp1.db',False,True,Nil,0,100,'') then  
MoveFile(PChar(FullPath),PChar(ExtractFilePath(paramstr(0))+'ARCHIV\'+ExtractFileName(FullPath)));

???


petvv   (2011-04-21 09:27:00) [8]


function DecompressFile;
var
 source,dest:TFileStream;
 decompressStream:TDecompressionStream;
 bytesread:integer;
 bytesread_d:int64;
 interval:integer;
 zena_byta:real;
 mainbuffer:array[0..buffer_size-1] of char;
 needProgress:boolean;
begin
needprogress:=false;
source:=TFileStream.Create(sourcefile,fmOpenRead);
if needcreate then
 dest:=TFileStream.Create(destinationfile,fmCreate)
              else
 dest:=TFileStream.Create(destinationfile,fmOpenWrite);
decompressStream:=TDecompressionStream.Create(source);
result:=true;
interval:=max_value-min_value;
zena_byta:=interval/source.Size;
bytesread_d:=0;
if progress<>nil then needProgress:=true;
if needprogress then
 begin
   SetPropValue(TObject(progress^),PositionPropName,min_value);
 end;
try
 repeat
  bytesread:=decompressStream.Read(mainbuffer,buffer_size);
  dest.Write(mainbuffer,bytesread);
  bytesread_d:=bytesread_d+bytesread;
  if refreshWnd then
    Application.ProcessMessages;
  if needprogress then
   begin
    if bytesread_d>source.Size then
     begin
      zena_byta:=interval/bytesread_d;
     end;
    SetPropValue(TObject(progress^),PositionPropName,min_value+round(bytesread_d*zena_byta));
   end;
 until bytesread<buffer_size;
except
 result:=false;
 decompressStream.Free;
 source.Free;
 dest.Free;
 exit;
end;
decompressStream.Free;
source.Free;
dest.Free;
end;


petvv   (2011-04-21 09:21:00) [9]

это функция возвращаемое значение Boolean


brother   (2011-04-21 09:16:00) [10]

DecompressFile это процедура или функция? И лучше покажи ее код...


Наверх

Титульная страница Поиск, карта сайта Написать письмо