Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Dateien in einem Ordner löschen (https://www.delphipraxis.net/204923-dateien-einem-ordner-loeschen.html)

kagi3624 14. Jul 2020 13:29

Delphi-Version: 6

Dateien in einem Ordner löschen
 
hallo, mit folgender Funkion möchte ich alle Dateien in einem Ordner löschen, die selbst keine Ordner sind.

Code:
SearchPattern := IncludeTrailingPathDelimiter(aPath) + '*.*';
  if FindFirst(SearchPattern, faAnyFile, Rec) = 0 then begin
    try
      repeat
        if Rec.Attr and faDirectory = 0 then begin

        delete(aPath+Rec.Name);

        end;
      until (FindNext(Rec) <> 0);
    finally
      SysUtils.FindClose(Rec);
    end;

  end;
Jetzt werden nicht alle Daten gelöscht und bleiben welche über, ich denke es ist deshalb, weil ich die Datei lösche bevor ich auf next springe. Ich habe es so versucht zu lösen, dass ich mir den Dateinamen merke und dann erst beim nächsten Durchlauf sie lösche. Aber so bleibt dann immer eine Datei am Ende übrig. Wie löse ich am besten, dass auch die letzte Datei gelöscht wird?

Amateurprofi 14. Jul 2020 19:29

AW: Dateien in einem Ordner löschen
 
Delphi-Quellcode:
PROCEDURE DeleteFilesInDirectory(const Path:String);
var I,R:Integer; SR:TSearchRec; List:TStringList;
begin
   List:=TStringList.Create;
   R:=FindFirst(Path+'\*.*', faAnyFile,SR);
   while R=0 do begin
      if (SR.Attr and faDirectory<>faDirectory) then List.Add(Path+'\'+SR.Name);
      R:=FindNext(SR);
   end;
   FindClose(SR);
   for I:=0 to List.Count-1 do DeleteFile(List[I]);
   List.Free;
end;

himitsu 14. Jul 2020 19:34

AW: Dateien in einem Ordner löschen
 
Delphi-Referenz durchsuchenDelete löscht Dateien?

Und noch einen Blick auf ein paar, inzwischen schon einige Jahre alte, Funktionen.
Delphi-Quellcode:
for S in TDirectory.GetFiles(Path) do // GetFiles liest zuerst in ein String-Array und das wird am Ende abgearbeitet
  TFile.Delete(S);

TurboMagic 14. Jul 2020 21:24

AW: Dateien in einem Ordner löschen
 
TDirectory etc. geht aber nicht wenn die Delphi Version des tragenden wirklich Delphi 6 ist. Der sollte sich Mal Gedanken machen ob ein Update drin ist. Seit D6 gab's so viele schöne neue Erweiterungen...

himitsu 14. Jul 2020 21:47

AW: Dateien in einem Ordner löschen
 
Jo, es heißt ja nicht dass es so bleiben muß. :zwinker:
Wobei ich dachte IncludeTrailingPathDelimiter wurde auch erst nach D6 erfunden, so zu Zeiten, als die neue IDE auftauchte oder die mobilen Platformen dazu kamen, aber vielleicht kam es ja doch schon vom Kylix. (IncludeTrailingBackslash)

Ansonsten kann man sich ja auch Anrekungen holen.
z.B. das Suchen der Dateien in eine Funktion auslagern, und dann ebenfalls das Ergebnis nutzen.

Dalai 15. Jul 2020 05:39

AW: Dateien in einem Ordner löschen
 
[OT]
Zitat:

Zitat von himitsu (Beitrag 1469564)
Wobei ich dachte IncludeTrailingPathDelimiter wurde auch erst nach D6 erfunden, so zu Zeiten, als die neue IDE auftauchte oder die mobilen Platformen dazu kamen, aber vielleicht kam es ja doch schon vom Kylix. (IncludeTrailingBackslash)

Ja, das kam schon mit Delphi 6 und Kylix auf.
[/OT]

Grüße
Dalai

kagi3624 15. Jul 2020 05:57

AW: Dateien in einem Ordner löschen
 
Zitat:

Zitat von himitsu (Beitrag 1469559)
Delphi-Referenz durchsuchenDelete löscht Dateien?

Und noch einen Blick auf ein paar, inzwischen schon einige Jahre alte, Funktionen.
Delphi-Quellcode:
for S in TDirectory.GetFiles(Path) do // GetFiles liest zuerst in ein String-Array und das wird am Ende abgearbeitet
  TFile.Delete(S);

Nein, natürlich nicht :stupid:

haentschman 15. Jul 2020 06:01

AW: Dateien in einem Ordner löschen
 
Moin...:P

Möööp... try/finally (List) ist hoffentlich kein Femdwort. :zwinker:

kagi3624 15. Jul 2020 15:24

AW: Dateien in einem Ordner löschen
 
Zitat:

Zitat von haentschman (Beitrag 1469571)
Moin...:P

Möööp... try/finally (List) ist hoffentlich kein Femdwort. :zwinker:

Ne, ich hab alles durch 14 tausend Dateien von zwei Rechnern löscht er ohne Probleme. Wenn ich das Programm aber auf einem dritten Rechner starte (durch automatische Dienste) dann bleibt er immer bei der hälfte oder so hängen. Allerdings zum Schluß, wenn etwa nur 200 dateien sind, dann löscht er alle. Also ich kann es mir nicht erklären, an meinem Code liegt es nicht...wobei...ich habe Delphi6

haentschman 16. Jul 2020 05:48

AW: Dateien in einem Ordner löschen
 
Moin...:P
Zitat:

List:=TStringList.Create;
...war darauf bezogen. Ich weis ja nicht, welche QT Version bei dir aktuell ist. :wink:
Delphi-Quellcode:
procedure DeleteFilesInDirectory(const Path: string);
var
  I: Integer;
  R: Integer;
  SR: TSearchRec;
  List: TStringList;
begin
   List := TStringList.Create;
   try
     R := FindFirst(Path + '\*.*', faAnyFile, SR);
     while R = 0 do
     begin
       if (SR.Attr and faDirectory <> faDirectory) then
       begin
         List.Add(Path + '\' + SR.Name);
       end;
       R := FindNext(SR);
     end;
     FindClose(SR);

     for I := 0 to List.Count - 1 do
     begin
       DeleteFile(List[I]);
     end;
   finally
     List.Free;
   end;
end;

hhcm 16. Jul 2020 06:33

AW: Dateien in einem Ordner löschen
 
Zitat:

Zitat von kagi3624 (Beitrag 1469659)
Wenn ich das Programm aber auf einem dritten Rechner starte (durch automatische Dienste) dann bleibt er immer bei der hälfte oder so hängen. Allerdings zum Schluß, wenn etwa nur 200 dateien sind, dann löscht er alle.

Sind die Dateien ggf. in Benutzung? Das kann z.B durch einen Virenscanner oder automatische Thumbgenerierung sein.
Wenn ich Dienst lese kann es auch sein, dass der Dienst keine Berechtigung hat die Datei zu löschen.


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