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

Вниз

Закончилась ли операция чтения записи   Найти похожие ветки 

 
petvv   (2011-04-21 09:12) [0]

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

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 то следующая инструкося не выполняется или выполняется не всегда, похоже винда не успевает закончить работу с архивом.

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


 
brother ©   (2011-04-21 09:16) [1]

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


 
petvv   (2011-04-21 09:21) [2]

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


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


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;


 
oldman ©   (2011-04-21 09:44) [4]

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) [5]

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


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


> 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)));
> ???

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


 
brother ©   (2011-04-21 10:03) [7]

> if refreshWnd then
>    Application.ProcessMessages;

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


 
oldman ©   (2011-04-21 10:08) [8]


> petvv   (21.04.11 10:01) [6]


По твоему

fun1();
fun2();


и

if fun1() then fun2();

одно и тоже?


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

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


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


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


круто!!!



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

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

Наверх




Память: 0.49 MB
Время: 0.005 c
2-1303300293
jacksotnik
2011-04-20 15:51
2011.07.24
Непонятки с кодировкой


2-1302617916
Gu
2011-04-12 18:18
2011.07.24
Отловить таймер


15-1302248344
Dennis I. Komarov
2011-04-08 11:39
2011.07.24
Для настроения - пятница


4-1249279630
DevilDevil
2009-08-03 10:07
2011.07.24
Выделен текст в ComboBox


2-1303016731
Kirill
2011-04-17 09:05
2011.07.24
Подключить внешний файл как строковое значение переменной