Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [gelöst] DeleteFile und Fehler 123 (falscher Syntax) (https://www.delphipraxis.net/138269-%5Bgeloest%5D-deletefile-und-fehler-123-falscher-syntax.html)

Schwedenbitter 6. Aug 2009 10:24


[gelöst] DeleteFile und Fehler 123 (falscher Syntax)
 
Hallo,

ich habe eine Textdatei mit lauter Dateinamen inklusive immer demselben Pfad. Also etwa so
Delphi-Quellcode:
Y:\Post\2009.08.06\_0000.png
Y:\Post\2009.08.06\_0001.png
Y:\Post\2009.08.06\_0002.png
Diese Dateinamen lade ich in eine TStringList, drucke sie und möchte anschließend alles weglöschen
Delphi-Quellcode:
 Uses Windows, SysUtils ...; // <- in genau dieser Reihenfolge
Var
   S    : String;
...

DruckJob:=TStringList.Create;
Try
   DruckJob.LoadFromFile(Printpfad+MyName+'.druck');
   If Not DeleteFile(Printpfad+MyName+'.druck') Then // <- Das klappt!
      ShowMessage(SysErrorMessage(GetLastError));
   // Hier wird gedruckt
   // Jetzt sollen alle Bilder gelöscht werden
   S:=ExtractFilePath(DruckJob.Strings[0])+'*.*';
   If Not DeleteFile(S) Then                       // <- Das klappt NICHT!
      ShowMessage(SysErrorMessage(GetLastError)+#13+S);
Finally
   DruckJob.Free;
End;
Leider bekomme ich jetzt den Fehler mit der Nummer 123 bzw. "Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch". Da ich mir S auch anzeigen lasse, kann ich sehen, dass der Inhalt "Y:\Post\2009.08.06\*.*" ist. Der Pfad und die Dateien existieren. Immerhin sind sie ja auch gedruckt worden.

Was mache ich verkehrt?

Zur Erläuterung: Ich benutze DeleteFile(); seit Ewigkeiten und hatte noch nie Probleme damit. Deshalb verstehe ich die Welt nicht mehr. Die Dateien liegen auf den Freigaben eines Servers mit Linux und Samba. Die .druck-Datei liegt übrigens auch dort und kann erfolgreich gelöscht werden! Ich habe ausreichend Rechte und kann die Dateien mit Windows, cmd etc. pp. ohne Probleme bearbeiten, löschen ...

Es dankt für Hinweise -> Alex

Uwe Raabe 6. Aug 2009 10:36

Re: DeleteFile und Fehler 123 (Der Syntax ... ist falsch)
 
In der Dokumentation ist nirgends erwähnt, daß DeleteFile mit Wildcards zurecht kommt...

Schwedenbitter 6. Aug 2009 11:12

Re: DeleteFile und Fehler 123 (Der Syntax ... ist falsch)
 
Zitat:

Zitat von Uwe Raabe
In der Dokumentation ist nirgends erwähnt, daß DeleteFile mit Wildcards zurecht kommt...

Toll das wars.

Gibt es eine andere Funktion, die mit Wildcards umgehen kann? Die Listen können bei mir sehr lang werden und dann dauert es ewig.

Danke schon einmal, Alex

Luckie 6. Aug 2009 11:22

Re: DeleteFile und Fehler 123 (Der Syntax ... ist falsch)
 
Hier im Forum suchenSHFileOperation.

Andreas L. 6. Aug 2009 11:57

Re: DeleteFile und Fehler 123 (Der Syntax ... ist falsch)
 
Wieso verwendest du keine For-Schleife?

Delphi-Quellcode:
var
  i: Integer;
begin
  ...
  for i := 0 to DruckJob.Count -1 do
    DeleteFile(DruckJob[i]);
end;
EDIT: Gehts hier wirklich um .NET?

himitsu 6. Aug 2009 12:34

Re: DeleteFile und Fehler 123 (Der Syntax ... ist falsch)
 
die .druck-Datei liegt im selben Ordner?

dann kannst du per SHFileOperation auch gleich alles zusammen löschen
Printpfad+MyName+'*.*'

denn wenn .druck und die Dateien in dieser Datei alle auf den selben Ornder zeigen und du dann eh nur von der ersten Datei den Pfad, zussammen mit *.* nutzt, dann kommt es am Ende auch wieder nur auf den oben genannten Pfad raus.


Aber wenn noch andere Dateien/Bilder zur selben Zeit in diesem Ordner sein können, dann solltest du wohl besser etwas wie von Andreas L. Vorgeschlagenes verwenden, bevor zuviel gelöscht wird.

PS: FindFirst/FindNext + DeleteFile wäre auch gegangen ... Ersteres versteht Masken und liefert einzelne Dateien, welche DeleteFile wiederrum mag.

Schwedenbitter 6. Aug 2009 13:16

Re: DeleteFile und Fehler 123 (Der Syntax ... ist falsch)
 
Danke für Eure Tipps!

@ Andreas L.
Zitat:

Zitat von Andreas L.
Wieso verwendest du keine For-Schleife?

Mache ich ja jetzt. Mein funktionierender Code sieht jetzt so aus:
Delphi-Quellcode:
For I:=0 To Pred(DruckJob.Count) Do
   If Not DeleteFile(DruckJob.Strings[I]) Then
      Application.MessageBox(PAnsiChar(SysErrorMessage(GetLastError)),'Fehler',0);
{$I-}rmdir(ExtractFilePath(DruckJob.Strings[0]));{$I+}
If IOResult<>0 Then
   Application.MessageBox(PAnsiChar(SysErrorMessage(GetLastError)),'Fehler',0);
Zitat:

Zitat von Andreas L.
EDIT: Gehts hier wirklich um .NET?

Ich habe keine Ahnung. Ich habe bereits mehrfach versucht, mich mal im Delphidschungel zurecht zu finden und habe es dann aufgegeben. Ich habe TurboDelphi (gemeldet als Version 10) und mein in die Jahre gekommenes Delphi 6. Für TurboDelphi musste ich alles mögliches mit .NET installieren. Daher stammt meine Einordnung. Falls jemand einen Link mit entsprechendem Überblick hat, wäre ich dankbar. Mir geht es auch darum, welches Delphi nativ PNG unterstützt.

@ himitsu
Die Dateien liegen nicht im selben Ordner. Ich habe von SHFileOperation auch Abstand genommen, weil es nicht Plattformübergreifend ist. Und das Bestücken der Variablen ist auch komplizierter; selbst wenn es später schneller sein mag.

FindFirst ist eine gute Idee. Zwar liefert TSearchRec.Name nur die Dateinamen ohne Pfad und ich habe beides schon in meiner Liste. Aber ich könnte so noch prüfen, ob wirklich alles leer ist, bevor ich das Verzeichnis lösche.

Danke, Alex

himitsu 6. Aug 2009 13:30

Re: DeleteFile und Fehler 123 (Der Syntax ... ist falsch)
 
Zitat:

Zitat von Schwedenbitter
Aber ich könnte so noch prüfen, ob wirklich alles leer ist, bevor ich das Verzeichnis lösche.

brauchst'e nicht ... rmdir löscht nur leere Verzeichnisse, als wenn du da einfach das Result prüfst True = wurde gelöscht
False = könnte nicht gelöscht werten (z.B. Verzeichnis existiert nicht oder noch irgendwas drin)

Andreas L. 6. Aug 2009 14:23

Re: DeleteFile und Fehler 123 (Der Syntax ... ist falsch)
 
Zitat:

Zitat von Schwedenbitter
Zitat:

Zitat von Andreas L.
EDIT: Gehts hier wirklich um .NET?

Ich habe keine Ahnung. Ich habe bereits mehrfach versucht, mich mal im Delphidschungel zurecht zu finden und habe es dann aufgegeben. Ich habe TurboDelphi (gemeldet als Version 10) und mein in die Jahre gekommenes Delphi 6. Für TurboDelphi musste ich alles mögliches mit .NET installieren. Daher stammt meine Einordnung. Falls jemand einen Link mit entsprechendem Überblick hat, wäre ich dankbar. Mir geht es auch darum, welches Delphi nativ PNG unterstützt.

Delphi 6 ist Win32. Von Turbo Delphi gibt es sowohl eine Win32 als auch eine Version für .NET. Delphi 2009 unterstützt PNG. Wobei es aber für Turbo Delphi und auch für Delphi 6 einige gute PNG-Komponenten gibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 Uhr.

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