Problem mit "DeleteFile"



  • Hallo,
    wahrscheinlich gehört die Funktion DeleteFile() aus SysUtils zu dem Grundwerkzeug. Dennoch habe ich Probleme beim Löschen einer existienden Datei.
    Ich übergebe wie folgt den Namen und den Pfad der zu löschende Datei an die Funktion : "C:\\TEMP\\TreiberData.crc"

    DeleteFile("C:\\TEMP\\TreiberData.crc");
    

    Dennoch erhalte ich nur ein false zurück. Wo liegt das Problem?



  • MSDN Library schrieb:

    To get extended error information, call GetLastError.



  • ???



  • Die Funktion DeleteFile gibt es zweimal:
    - SysUtils: bool DeleteFile(AnsiString)
    - WinAPI: BOOL DeleteFile(LPCTSTR) // <-- entspricht (const char 😉

    Du rufst die 2. Funktion auf (da dein String ein 'const char *' ist) und kannst daher mittels GetLastError dir den Fehelrcode zurückgeben lassen (siehe MSDN).

    Generell kann es folgende Probleme beim Löschen einer Datei geben:
    - Datei existiert nicht (Pfad oder Dateiname)
    - Datei ist schreibgeschützt
    - Datei wird noch von einem Prozess benutzt
    - Fehlende Rechte
    - ...

    Um doch die erste Funktion aufzurufen (welche intern auch nur die WinAPI-Funktion aufruft), einfach casten bzw. konstruieren:

    DeleteFile(AnsiString("C:\\TEMP\\TreiberData.crc"));
    


  • Danke schöne,

    gibt es eine Funktion, die Ordner löschen kann samt Inhalt und Unterordner?



  • Nein, direkt nicht.

    Du kannst RemoveDir() nur für ein leeres Verzeichnis erfolgreich aufrufen, d.h. du mußt zuerst alle Unterordner und Dateien daraus rekursiv löschen.
    Mittels FindFirst() und FindNext() kannst du dir alle Dateien und Ordner ermitteln lassen:
    - wenn Datei, dann Datei löschen
    - wenn Ordner, dann rekursiv die Funktion wieder aufrufen

    In der FAQ müßte es genug Beispiele dafür geben.




Anmelden zum Antworten