13. december 2002 - 08:41Der er
5 kommentarer og 1 løsning
cannot open file
Et delphi-program skriver til en ekstern textfil, som umiddelbart efter åbnes igen for læsning. Filen er lukket og en searchrec handle er lukket med closefind. Jeg har endog lagt en sløjfe ind som venter 1 sekund mellem de to operationer, men alligevel får jeg oftest (men ikke altid!!) fejlmeddelelsen at filen ikke kan åbnes. Nu har jeg prøvet alt: der må en ekspert til ;---)
Her er den pågældende del af programmet: 2 linjer fra hovedprogram: LavBatFilOgKorDen('r:\pendler.dat\arj32.exe t r:\pendler.dat\'+direc+'.ttt -i - y >r:\pendler.dat\inter.ts1',''); //ARJ er et ZIPlignende DOS-program. Skærm-output gemmes i inter.ts1 HakLinjerAfFil('r:\pendler.dat\inter.ts1',6); //HER kommer fejlmeddelelsen
Procedurer: procedure TForm1.LavBatFilOgKorDen(streng:string;vindu:string); var f:textFile; i, fejl: integer; begin //opretter og eksekverer en batfil. Venter på at batfil er færdig. DeleteFile('r:\pendler.dat\venttil.eks'); AssignFile(f,'r:\pendler.dat\batfil1.bat'); rewrite(f); writeln(f,streng); writeln(f,'copy r:\pendler.dat\pas.paa r:\pendler.dat\venttil.eks'); //signalfil oprettes flush(f); CloseFile(f); sleep(1000); if vindu='vis' then executefile('r:\pendler.dat\batfil1.bat','','',SW_SHOW) else executefile('r:\pendler.dat\batfil1.bat','','',SW_SHOW); //SW_SHOWMINIMIZED repeat for i:=1 to 10000 do x:=1; fejl:=findfirst('r:\pendler.dat\venttil.eks',faANYFILE,test_fil); until fejl=0; for i:=1 to 10000 do x:=1; //vent indtil signalfilen venttil.eks oprettes DeleteFile('r:\pendler.dat\venttil.eks'); //signalfilen slettes end;
procedure HakLinjerAfFil(filnavn:string; AntalLinjer:integer); var fil1,fil2: textfile; i: integer; begin //irrelevante linjer i outputfil fra ARJ fjernes Movefile(filnavn,'r:\pendler.dat\slet.mig'); AssignFile(fil1,'r:\pendler.dat\slet.mig'); AssignFile(fil2,filnavn); Rewrite(fil2); Reset(fil1); for i:=1 to AntalLinjer do readln(fil1,linje); while not eof(fil1) do begin readln(fil1,linje); writeln(fil2,linje); end; CloseFile(fil1); CloseFile(fil2); end;
Prøv at bruge Borrisholt's Execute and wait - Den gør vist det du skal bruge. Med dine løkker og sleep bruger du bare processortid, og ARJ får ikke tid til at køre færdig.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.