Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DeleteFile - Error 2/32 (https://www.delphipraxis.net/136981-deletefile-error-2-32-a.html)

Delphi_gn7 11. Jul 2009 16:56


DeleteFile - Error 2/32
 
Hallo,

Ich wollte mit dem Befehl
Delphi-Quellcode:
deletefile('E:\Dokumente\'+IntToStr(i)+'-'+IntToStr(j)+'-'+IntToStr(k)+'.txt');
eine von mehreren Dateien löschen, die ich vorher in verschachtelten Schleife erstellt habe, wobei i,j und k für Jahr-Monat-Tag standen (hier in dem Fall stehen die Variablen auf 2007, 1 und 1).

Gestern noch lief das Programm, löschte die datei jedoch einfach nicht und mit getlasterror habe ich "32" ausgegeben bekommen.
Heute habe ich es, ohne das ich mich erinnere, es verändert zu haben, es erneut ausgeführt, was allerdings wegen dem [Fehler] Inkompatible Typen: 'String' und PAnsiChar' nicht mehr funktionierte (???).

Ändere ich die Anweisung in
Delphi-Quellcode:
deletefile('E:\Dokumente\2007-1-1.txt')
lässt sich das Programm ausführen, löscht die Datei aber auch nicht und hier erscheint der Fehler "2" durch getlasterror.


Was liegt denn der unterschied zwischen
Delphi-Quellcode:
deletefile('E:\Dokumente\2007-1-1.txt')
und
Delphi-Quellcode:
deletefile('E:\Dokumente\'+IntToStr(i)+'-'+IntToStr(j)+'-'+IntToStr(k)+'.txt')
wenn doch i=2007, j=1 und k=1 sind? Und warum lässt sich die Datei auf keine der beiden Wege löschen (sie ist nicht leer)?

Fridolin Walther 11. Jul 2009 17:08

Re: DeleteFile - Error 2/32
 
Fehler 2: File not found. Das Pfad war falsch.
Fehler 32: Sharing violation. Die Datei befand sich in Benutzung.

Es gibt 2 verschiedene DeleteFile Funktionen. Eine definiert in der Unit Windows und erfordert einen PChar und eine definiert in SysUtils die einen String verlangt. Welche genau verwendet wird, hängt von der Reihenfolge ab in der der Compiler die Units lädt. Entsprechend wäre es sinnvoll (da du die String Variante aufrufst) sysutils.DeleteFile zu benutzen und dem Compiler somit mitzuteilen, daß Du explizit die Funktion aus sysutils verwenden möchtest.

Bei Funktionen denen String Konstanten übergeben werden, übernimmt übrigens Compiler Magic die Konvertierung in einen PChar. Daher funktioniert das DeleteFile('<whatever>'), allerdings der Aufruf mit einem zusammengesetzten String nicht.

jaenicke 11. Jul 2009 17:14

Re: DeleteFile - Error 2/32
 
Erstens: inkompatible Typen hieße, dass du auf PChar casten musst. Eigentlich ist DeleteFile allerdings eine Funktion, die einen String erwartet, da sollte das nicht passieren, es sei denn du hast in der uses die Reihenfolge geändert.

Zweitens: Wie wäre es, wenn du einmal schaust, was der Fehler 32 z.B. bedeutet? :roll:
Zitat:

The process cannot access the file because it is being used by another process.
(Entweder hier: http://msdn.microsoft.com/en-us/library/ms681382.aspx oder via SysErrorMessage im Programm)

Fridolin Walther 11. Jul 2009 17:20

Re: DeleteFile - Error 2/32
 
[ot]Du warst auch schon mal schneller Sebastian ;).[/ot]

Delphi_gn7 12. Jul 2009 09:23

Re: DeleteFile - Error 2/32
 
Danke, es klappt mit sysutils.DeleteFile :)

meike52 5. Jan 2015 06:54

AW: DeleteFile - Error 2/32
 
Danke, das war DER Tip. Hat mich aber Stunden beim Fehler suchen gekostet!!!!:lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 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