AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Dateien in einem Ordner löschen

Ein Thema von kagi3624 · begonnen am 14. Jul 2020 · letzter Beitrag vom 16. Jul 2020
Antwort Antwort
Seite 1 von 2  1 2   
kagi3624

Registriert seit: 3. Feb 2020
112 Beiträge
 
Delphi 6 Enterprise
 
#1

Dateien in einem Ordner löschen

  Alt 14. Jul 2020, 14:29
Delphi-Version: 6
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?
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
940 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Dateien in einem Ordner löschen

  Alt 14. Jul 2020, 20:29
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;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.368 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Dateien in einem Ordner löschen

  Alt 14. Jul 2020, 20:34
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);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (14. Jul 2020 um 20:37 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
1.558 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Dateien in einem Ordner löschen

  Alt 14. Jul 2020, 22:24
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...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.368 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Dateien in einem Ordner löschen

  Alt 14. Jul 2020, 22:47
Jo, es heißt ja nicht dass es so bleiben muß.
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (14. Jul 2020 um 22:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.588 Beiträge
 
Delphi 5 Professional
 
#6

AW: Dateien in einem Ordner löschen

  Alt 15. Jul 2020, 06:39
[OT]
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
  Mit Zitat antworten Zitat
kagi3624

Registriert seit: 3. Feb 2020
112 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Dateien in einem Ordner löschen

  Alt 15. Jul 2020, 06:57
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
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.763 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: Dateien in einem Ordner löschen

  Alt 15. Jul 2020, 07:01
Moin...

Möööp... try/finally (List) ist hoffentlich kein Femdwort.
  Mit Zitat antworten Zitat
kagi3624

Registriert seit: 3. Feb 2020
112 Beiträge
 
Delphi 6 Enterprise
 
#9

AW: Dateien in einem Ordner löschen

  Alt 15. Jul 2020, 16:24
Moin...

Möööp... try/finally (List) ist hoffentlich kein Femdwort.
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
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.763 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

AW: Dateien in einem Ordner löschen

  Alt 16. Jul 2020, 06:48
Moin...
Zitat:
List:=TStringList.Create;
...war darauf bezogen. Ich weis ja nicht, welche QT Version bei dir aktuell ist.
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;

Geändert von haentschman (16. Jul 2020 um 06:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 14:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf