![]() |
Alle Dateien in einem Ordner schrotten???
Hallo,
Vorab sei gesagt, daß ich in diesem Forum schon jede menge Threads über das unwiderbringliche Löschen von Dateien gefunden habe. Aber wie funktioniert das "Schrotten" (also mit Müll überschreiben und danach endgültig löschen) mit allen Dateien in einem Ordner? Wenn es geht, ohne OpenDialog. Danke |
Re: Alle Dateien in einem Ordner schrotten???
Man nutzt die DP suche um nach FindFirst, FindNext und FindClose zu suchen um alle Dateien in einem Verzeichnis zu ermitteln.
|
Re: Alle Dateien in einem Ordner schrotten???
am besten in der codelib nach der rekursiven variante.
|
Re: Alle Dateien in einem Ordner schrotten???
Danke
|
Re: Alle Dateien in einem Ordner schrotten???
Zitat:
Also so Sachen blick ich immer sehr skeptisch entgegen und frag mich immer, was der Sinn von so Spielchen sein soll. :gruebel: |
Re: Alle Dateien in einem Ordner schrotten???
Zitat:
Aenogym |
Re: Alle Dateien in einem Ordner schrotten???
Genau, bin nur nicht auf die Bezeichnung "Shredder" gekommen. Muß man denn immer gleich an böswillige Absichten denken??? Ich habe nicht vor, jemanden zu schädigen!!!
Ich suche lediglich eine Methode, wie man Dateien in einem Ordner, ohne jeweils eine Datei auswählen zu müssen, in einem Rutsch sicher und unwiederbringlich zu löschen. |
Re: Alle Dateien in einem Ordner schrotten???
An alle den es interessiert. Ich habe das Problem mit einem Code-Schnipsel aus einen anderem Forum wie folgt gelöst:
Delphi-Quellcode:
Wobei J:\Test für mein Versuchs-Ordner stand.
function WipeFile(const szFilename: string): boolean;
var f : file; buf : array[0..65535]of byte; i, iRead, iWrite : integer; fpos : longint; begin {$I-} AssignFile(f,szFileName); ReSet(f,1); if(IoResult = 0) then begin repeat fPos := filepos(f); // aktuelle Position merken BlockRead(f,buf,sizeof(buf),iRead); // max. 65k lesen // der tatsächlich gelesene Wert steckt in "iRead" und // ist irgendwann Null, wenn das Ende der Datei erreicht // wurde und keine Bytes mehr gelesen werden können if(iRead > 0) then // (alte?) Methode des DOD (US-Verteidigungsministerium): // einmal 00 schreiben; einmal FF schreiben (3 Wiederholungen) // dann F6 schreiben // (Norton WipeInfo macht´s heute noch so; außer, das 0x01 // anstelle von 0xff angegeben ist) for i := 1 to 7 do begin case i of 1,3,5 : fillchar(buf,iRead, 0); // Inhalt mit 0x00 überschreiben 2,4,6 : fillchar(buf,iRead,255); // Inhalt mit 0xff überschreiben 7 : fillchar(buf,iRead,246); // Inhalt mit 0xf6 überschreiben end; seek(f,fPos); // gespeicherte Position suchen BlockWrite(f,buf,iRead,iWrite); // Puffer schreiben if(iWrite <> iRead) then break; // Fehler! :o( end; until(iRead = 0) or (iWrite <> iRead); CloseFile(f); // alte Datei schließen Rename(f,'D'); // alten Namen "vernichten" ReWrite(f,1); // alte Position "vernichten" CloseFile(f); Erase(f); // Datei löschen end; {$I+} Result := (IoResult = 0); end; Procedure DeleteFiles(aPath, aFindMask: String; aWithSub: Boolean); Var FindRec: tSearchRec; Begin // Wenn aPath oder aFind nicht angegeben ist // dann raus If (aPath = '') or (aFindMask = '') Then Exit; // Wenn am Ende der Pfadangabe noch kein \ steht, dieses hinzufügen If aPath[Length (aPath)] <> '\' Then aPath := aPath + '\'; // Im aktuellen Verzeichnis nach der Datei suchen If FindFirst (aPath + aFindMask, faAnyFile, FindRec) = 0 Then Repeat If (FindRec.Name <> '.') and (FindRec.Name <> '..') Then // ...Ergebnis löschen WipeFile(aPath + FindRec.Name); Until FindNext (FindRec) <> 0; FindClose (FindRec); // Wenn nicht in Unterverzeichnissen gesucht werden soll dann raus If Not aWithSub Then Exit; // In Unterverzeichnissen weiter suchen If FindFirst (aPath + '*.*', faAnyFile, FindRec) = 0 Then Repeat If (FindRec.Name <> '.') and (FindRec.Name <> '..') Then // Feststellen, ob es sich um ein Verzeichnis handelt If Boolean (FindRec.Attr and faDirectory) Then // Funktion erneut aufrufen, um Verzeichnis zu durchsuchen (Rekursion) DeleteFiles (aPath + FindRec.Name, aFindMask, aWithSub); Until FindNext (FindRec) <> 0; FindClose (FindRec); End; procedure TForm1.Button1Click(Sender: TObject); begin DeleteFiles ('j:\test', '*.*', True); end; getestet! Es funktioniert! Das einzigste was mich daran noch stört, das die leeren Ordner erhalten bleiben. Aber vielleicht gibt es hierfür auch noch eine Lösung. |
Re: Alle Dateien in einem Ordner schrotten???
In welchem Forum hättest du denn die Lösung? Hier oder im
![]() Wenn dich die leeren Ordner stören, dann solltest du sie löschen. Sie sind ja leer. Als Tipp: Erst den Ordner löschen, dann eine temporäre Datei mit dem gleichen Namen erzeugen, selbige umbenennen, damit sie nur noch aus einem Zeichen besteht, und dann löschen. :) Oder den Ordner umbenennen, damit er nur noch aus einem Zeichen besteht, und dann löschen. |
Re: Alle Dateien in einem Ordner schrotten???
Genau dieses Forum. Und wenn mich nicht alles täuscht, ist der Code sogar von Dir! Allerdings kann ich Deinen Tip nicht nach vollziehen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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