Prøv evt. også at skrive "extractFilePath(ParamStr(0))+'indbox\'+maillist.Selected.SubItems.Strings[0]+'.msg'" ud for at se om strengen er som den skal være.
Det lyder for mig som om du har åbnet filen andetsteds og derfor ikke kan slette den. Den fejl begår jeg ofte hvor jeg ikke får lukket filen ordentligt.
Mht. doc404 så findes der en funktion til at kontrollere om den slutter med et backslash: fn := IncludeTrailingBackslash(fn);
Prøv at køre snowballs eksempel (og prøv at gemme filnavnet i en streng) - så finder du sikkert fejlen:
var st : string; begin assert(assigned(maillist.Selected),'Not assigned'); // Brokker sig hvis nil try st := extractFilePath(ParamStr(0))+ 'indbox\'+maillist.Selected.SubItems.Strings[0]+'.msg'; DeleteFile(st); except on e: exception do MessageDlg(e.Message+#13#10+st,mtErrror,[nbOK],0); end; // try end;
var st : string; fp : textfile; begin if not FileExists('test.txt') then exit;
assignfile(fp,'test.txt'); reset(fp); try while not eof(fp) do begin readln(fp,st); Memo1.Lines.Add(st); end; // while finally closefile(fp); end; end;
Ved at placere den i en try-finally så sikrer du, at filen bliver lukket uanset hvordan behandlingen gik.
En anden måde at sikre at filerne lukkes ordentligt, er ved at bruge streams hvor det kan lade sig gøre. En stream er normalt en binær fil, men den største forskel er, at det er et objekt hvor ovenstående er noget "gammelt" noget.
Tilsvarende kode ville se nogenlunde sådan ud:
var fs : TFileStream; buffer : pchar; begin getmem(buffer,1024); fs := TFileStream.Create('test.dat',fmOpenRead); try while fs.position < fs.size do begin fs.read(buffer^,sizeof(buffer)); // Behandl buffer her end; // while finally fs.Free; freemem(buffer); end; end;
Synes godt om
Ny brugerNybegynder
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.