Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi bestimmte Datein in Ordner löschen (https://www.delphipraxis.net/77237-bestimmte-datein-ordner-loeschen.html)

The Lord 16. Sep 2006 18:33


bestimmte Datein in Ordner löschen
 
Hallo ich habe ein Problem. Ich denke ihr könnt mir helfen :)

Ich will bestimmte Dateien aus einem Ordner löschen. Es gibt Datein, die sollen erhalten bleiben. Dann habe ich mir überlegt, dass ich die Ausnahmen kopieren in ein temporäres Verzeichnis könnte, dann den gesamten Ordner löschen und am Ende die temporär gespeicherten Dateien wieder zurück in den Ordner zurückverschieben könnte.

Hab es ausprobiert und es funktioniert!

Jedoch habe ich folgendes Problem: Wobei ich beim testen und überlegen nicht gedacht habe ist, dass die Datein die verschoben werden müssen fast 4GB groß sind. Das ist auf jeden Fall zu viel, weil das temporärer zu verschieben braucht sehr viel Speicherplatz und Zeit!

Wie kann ich es am besten lösen?

Vielleicht kann man eine Liste der Dateinamen erstellen, die Ausnahmen herausfiltern und die restlichen Datein löschen?



Gruß,
Der Lord

Daniel B 16. Sep 2006 18:39

Re: bestimmte Datein in Ordner löschen
 
Das mit der Liste ist schonmal gut, aber wichtiger wäre es zu wissen, nach welche kriterien du die Dateien löscht, dann bruachst du nur eine Liste mit den zu löschenden Dateien.

The Lord 16. Sep 2006 18:41

Re: bestimmte Datein in Ordner löschen
 
Es ist eigentlich eine feste Anzahl der Datein.
Quasi Datei a,b,c...,z (z.B.)

Und alle anderen sollen gelöscht werden.

Aber wie setze ich die theoretische Überlegung um? Das ist ja mein Problem ;)

Zacherl 16. Sep 2006 18:44

Re: bestimmte Datein in Ordner löschen
 
Erstmal alle Dateien des Ordners in einer StringList auflisten (Hier im Forum suchenFindFirst), dann die gewünschten Ausnahmen aus der Liste entfernen und die in der Liste stehenden Dateien löschen.

Florian

The Lord 19. Sep 2006 11:56

Re: bestimmte Datein in Ordner löschen
 
ich hab noch diese funktion gefunden. die müsste mir eigentlich helfen (Link). aber wie wende ich die an?

Daniel B 19. Sep 2006 11:59

Re: bestimmte Datein in Ordner löschen
 
Oben steht welche unit du dazu brauchst, die müsstest du dir erstmal besorgen, sieht nach JVCL aus, sprich Jedis

The Lord 19. Sep 2006 13:53

Re: bestimmte Datein in Ordner löschen
 
Kann ich zwei Listen auf diese Art und Weise vergleichen?


Delphi-Quellcode:

  al:=liste.count;
  aj:=ja_liste.count;
 

  for i := 1 to al do
      for j := 1 to aj do
          if liste[i] = ja_liste[j]
             then liste[i] := '#';
Die restlichen Dateinamen würde ich dann löschen.

Ich brauche nämlich eine Art Schnittmenge. Gelten hierbei auch die Mengenoperatoren?

The Lord 19. Sep 2006 18:02

Re: bestimmte Datein in Ordner löschen
 
Die Operatoren funktionieren anscheinend nicht. Wie kann man es dann machen? Doch nur die einzelnen Elemente untereinander vergleichen?

Gruß

The Lord 20. Sep 2006 11:32

Re: bestimmte Datein in Ordner löschen
 
Habe zu Testzwecken mal etwas geschrieben, aber warum funktioniert es nicht?

Delphi-Quellcode:

procedure TForm1.FormCreate(Sender: TObject);
var i, j, al, aj : integer;
    liste, ja_liste, del_liste, ok_liste : TStringList;
begin

  liste:=TStringList.Create;
  ja_liste:=TStringList.Create;
  del_liste:=TStringList.Create;
  ok_liste:=TStringList.Create;

  liste.Add('');
  liste.Add('a');
  liste.Add('b');
  liste.Add('d');
  liste.Add('r');
  liste.Add('x');
  liste.Add('a');
  liste.Add('c');
  liste.Add('b');
  liste.Add('c');

  ja_liste.Add('');
 // ja_liste.Add('a'); // Falls mehr als ein Objekt hier steht, funktionert das Ganze nicht mehr
  ja_liste.Add('x');

  al:=liste.count;
  aj:=ja_liste.count;

  ShowMessage (IntToStr(al)+';'+IntToStr(aj)); // Zur Überprüfung, wie lang die Listen sind

  for i := 1 to al-1 do
      for j := 1 to aj-1 do
          if liste[i] = ja_liste[j]
             then ok_liste.Add(liste[i])
             else del_liste.Add(liste[i]);

  Memo1.Lines:=ok_liste;
  Memo2.Lines:=del_liste;

end;
Es passiert folgendes:

Ich habe die zwei Listen. Einmal eine Liste von Strings die vorkommen (liste) und eine in der die erlaubten Strings stehen (ja_liste).
In Memo1 wird mir am Ende die Liste der erlaubten Strings angezeigt, in Memo2 sollen eigentlich die Strings angezeigt werden, die herausgenommen werden. Wenn die Liste ja_liste aus nur nur z.B. 'a' besteht funktioniert das ganze wunderbar. Nur sobald mehr vorkommen, gibt es einen Fehler mit der Zähschleife. Dann wir viel zu viel und falsches Ausgegeben.


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