Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi File löschen geht nicht (https://www.delphipraxis.net/72753-file-loeschen-geht-nicht.html)

Andidreas 6. Jul 2006 10:44


File löschen geht nicht
 
hi, versuch grad die ganze zeit ein file zu löschen, und ein anderes umzubennen...
bloss des geht irgendwie net... des eine file wird net gelöscht und des andere wird net umbenannt, die pfade stimmen aber alle....

hier mal der code:

Delphi-Quellcode:
procedure TMain_Form.prNewFile(sFile : String);

var
bl                           : Boolean;
i, iLen                      : Integer;
sPathC, sPathR, sRowC, sRowR : String;
txtFileC, txtFileR           : TextFile;
strFile                      : TFileStream;

begin

  //Create second File for latching
  sPathC := Copy(sFile, 1, 35) + '_C.txt';
  Try
    strFile := TFileStream.Create(sPathC, fmCreate);
  Finally
    strFile.Free;
  End;

  {$I-}

  //Assign File for Input
  sPathR := sFile;
  AssignFile(txtFileR, sPathR);
  Reset(txtFileR);

  //Assign File for Output
  AssignFile(txtFileC, sPathC);
  Append(txtFileC);

  //Copy Record from Input File to Output File
  While Not EOF(txtFileR) Do
  Begin
    Readln(txtFileR, sRowR);
    sRowC := sRowR;

    //Clear Apostrophe
    i := fnPosI('"', sRowC, 1);
    While i <> 0 Do
    Begin
      iLen := Length(sRowC);
      i := fnPosI('"', sRowC, 1);
      If i <> 0 Then
      Begin
        sRowC := Copy(sRowC, 1, i - 1) + Copy(sRowC, i + 1 , iLen);
      End;
    End;

    Writeln(txtFileC, sRowC);
  End;

  //Close File for Input and Output
  CloseFile(txtFileR);
  CloseFile(txtFileC);

  {$I+}
  bl := DeleteFile(sPathR);
  bl := RenameFile(sPathC, sPathR);


end;
sieht hier jemand im quelltext nen fehelr???

Christian Seehase 6. Jul 2006 10:57

Re: File löschen geht nicht
 
Moin Andreas,

prüf doch mal ob DeleteFile bzw. RenameFile erfolgreich ausgeführt wurden. Für den Fall, dass nicht, kannst Du Dir mit GetLastError und SysErrorMessage ja mal die Fehlerursache ausgeben lassen.

Go2EITS 6. Jul 2006 11:11

Re: File löschen geht nicht
 
Hi, wenn die Pfade stimmen täten, täten sie auch deleten und renamen.
Probier mal ein

if fileexists(sPathR) then showmessage(sPathR) else showmessage('Fehler: Path/File nicht gefunden '+sPathR);

if fileexists(sPathC) then showmessage(sPathc) else showmessage('Fehler: Path/File nicht gefunden '+sPathc);

Dann siehste mal, was los ist. Geht auch in einem Konsolenprogramm wenn Du unter USES Dialogs einbindest. (ohne Gewähr!)
GO2EITS

ste_ett 6. Jul 2006 11:19

Re: File löschen geht nicht
 
Zitat:

Zitat von Go2EITS
Hi, wenn die Pfade stimmen täten, täten sie auch deleten und renamen.

Eine schreibgeschützte Datei kann nicht gelöscht werden.

Man muss erst den Schreibschutz mit
Delphi-Quellcode:
  SetFileAttributes(Dateipfad, FILE_ATTRIBUTE_NORMAL);
entfernen, dann kann man die Datei löschen. :)

Go2EITS 6. Jul 2006 11:56

Re: File löschen geht nicht
 
@ste_ett
Klar, aber so sehe ich mal, ob dies mit dem Path wirklich stimmt.
Ich sehe aber nicht, warum normal erstellte Dateien hier schreibgeschützt sein sollten.
Grüsse Go2EITS

Andidreas 6. Jul 2006 12:00

Re: File löschen geht nicht
 
hab mir die fehlermeldung ausgeben lassen (auf die idee hätte ich au selber kommen können :wall: )

aber der fehler verblüfft mich: datei wird von anderem prozess verwendet, datei kann nicht gelöscht werden...

ich geb doch die datei (als die ich löschen will) mit close file frei... und bis zum delete wird se ja au von nix anderem verwendet...

edit:

ok glaub verblüffen tut er mich jetzt nicht wirklich mehr...
glaub es liegt daran...

Delphi-Quellcode:
While iRC = 0 Do
  Begin
    iRC := FindNext(recDat);
    If iRC = 0 Then
    Begin
      sFile := 'S:\Prod\' + recDat.Name;
      iSt := fnApostroph(sFile);
      If iSt > 0 Then
      Begin
        [b]prNewFile(sFile);[/b]
      End;
    End;
End;
liegt wahrscheinlich daran das ich die prozedur aus dieser schleife aufruf und vermutlich kann er sie nicht löschen weil sie hier verwendet wird oder???


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz