Форум: "Начинающим";
Текущий архив: 2011.07.24;
Скачать: [xml.tar.bz2];
ВнизЗакончилась ли операция чтения записи Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c