Avatar billede hhjollund Praktikant
13. december 2002 - 08:41 Der 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 ;---)
Avatar billede abpdk Nybegynder
13. december 2002 - 08:47 #1
Kan du ikke poste noget kode?
Avatar billede dkn Nybegynder
13. december 2002 - 13:22 #2
hvordan åbner du din fil? brug evt fmsharedenynone
Avatar billede kayb Nybegynder
14. december 2002 - 18:52 #3
Hvis du laver 2 forskellige operationer på samme fil så husk altid at OPEN
og CLOSE filen du arbejder med. Det er ikke altid nok at lave en Closefind.
Avatar billede hhjollund Praktikant
16. december 2002 - 18:24 #4
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;
Avatar billede hreiff Nybegynder
16. januar 2003 - 11:36 #5
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.

http://www.borrisholt.com/Win32api/DelphiSource/ExecuteAndWait.zip
Avatar billede hhjollund Praktikant
14. august 2007 - 00:02 #6
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester