Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1249032759
Armature_Current
2009-07-31 13:32
2011.07.24
Синхронизация потоков


1-1260890209
harisma
2009-12-15 18:16
2011.07.24
Назначение задания виндовому планировщику (для Вин ХР)


1-1261019733
Phantomouse
2009-12-17 06:15
2011.07.24
Самопроизвольное появление формы


2-1303147684
TStas
2011-04-18 21:28
2011.07.24
Ошибка при чтении компонента из потока


2-1303058118
prodex
2011-04-17 20:35
2011.07.24
Ошибка при вызове CreateBlobStream





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский