Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Nach Dateityp suchen und dann löschen (https://www.delphipraxis.net/110876-nach-dateityp-suchen-und-dann-loeschen.html)

Larsi 26. Mär 2008 08:53


Nach Dateityp suchen und dann löschen
 
Hi,
ich schaffe es so rekursiv nach Dateien zu suchen, jedoch möchte ich nicht, dass sie nur gesucht werden, sie sollen auch gleich gelöscht werden!
Delphi-Quellcode:
procedure GetFilesInDirectory(Directory: String; const Mask: String;
                              List: TStrings;
                              WithSubDirs, ClearList: Boolean);

procedure ScanDir(const Directory: String);
var
  SR: TSearchRec;
begin
  if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then try
    repeat
      List.Add(Directory + SR.Name)
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;

  if WithSubDirs then begin
    if FindFirst(Directory + '*.*', faAnyFile, SR) = 0 then try
      repeat
        if ((SR.attr and faDirectory) = faDirectory) and
           (SR.Name <> '.') and (SR.Name <> '..') then
          ScanDir(Directory + SR.Name + '\');
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;

begin
  List.BeginUpdate;
  try
    if ClearList then
      List.Clear;
    if Directory = '' then Exit;
    if Directory[Length(Directory)] <> '\' then
      Directory := Directory + '\';
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;

Ich hoffe mir kann jemand daraus eine Abänderung machen, dass sie also die Prozedur gleich auch noch die Dateien löscht.

Als Verwendungsbeispiel:
Delphi-Quellcode:
 GetFilesInDirectory('C:\', '*.*', Listbox1.Items, False, True);
Am Besten wäre natürlich dass man einfach noch ein Boolean Wert hinzufügen könnte :). Vielleicht geht dass auch mit ner For Schleife mit der Listbox dann aber ich glaube dass dauert dann viel länger oder?



MFG Lars Wiltfang

Kroko1999 26. Mär 2008 09:04

Re: Nach Dateityp suchen und dann löschen
 
nach List.Add() einfach DeleteFile aufrufen, oder habe ich etwas überlesene?

Larsi 26. Mär 2008 09:06

Re: Nach Dateityp suchen und dann löschen
 
Alos ich soll unter diese Zeile:
List.Add(Directory + SR.Name)

Das hier hinzufügen:
DeleteFile(Directory + SR.Name)



???

grenzgaenger 26. Mär 2008 09:07

Re: Nach Dateityp suchen und dann löschen
 
IPO --> IPO

Dateien suchen und zwischenspeichern (mit pfaden), in der zweiten phase den zwischenspeicher abarbeiten.

IPO bitte nicht vermischen.

Larsi 26. Mär 2008 09:09

Re: Nach Dateityp suchen und dann löschen
 
Danke es geht!!! :):):):):) Vielen Vielen Dank, ich dachte ich müsste die Idee von mir jetzt schon aufgeben^^

Larsi 26. Mär 2008 09:21

Re: Nach Dateityp suchen und dann löschen
 
Geht doch nicht :( Es werden zwar Daten gelöscht aber immer nur die die nicht in einem Unterverzeichniss liegen, wass muss ich machen?

RavenIV 26. Mär 2008 09:21

Re: Nach Dateityp suchen und dann löschen
 
Zitat:

Zitat von Larsi
Alos ich soll unter diese Zeile:
List.Add(Directory + SR.Name)

Das hier hinzufügen:
DeleteFile(Directory + SR.Name)

Genau.
Du hast den Eintrag doch schon gefunden.
Warum löschst Du ihn dann nicht gleich, anstatt ihn in eine Liste einzufügen?

Die Muhkuh 26. Mär 2008 09:31

Re: Nach Dateityp suchen und dann löschen
 
Zitat:

Zitat von grenzgaenger
IPO --> IPO

IPO = Input - Processing - Output = EVA?

Delphi-Quellcode:
repeat
  List.Add(Directory + SR.Name);
  DeleteFile(Directory + SR.Name);
until FindNext(SR) <> 0;

Larsi 26. Mär 2008 09:36

Re: Nach Dateityp suchen und dann löschen
 
Und wo ist vom Code her jetzt ein Unterschied, mein Problem ist ja jetzt dass der Inhalt Unterordner nicht gelöscht wird!

Die Muhkuh 26. Mär 2008 09:50

Re: Nach Dateityp suchen und dann löschen
 
Zitat:

Zitat von Larsi
Und wo ist vom Code her jetzt ein Unterschied, mein Problem ist ja jetzt dass der Inhalt Unterordner nicht gelöscht wird!

Wenn das hier:

Delphi-Quellcode:
GetFilesInDirectory('C:\', '*.*', Listbox1.Items, False, True);
Dein Aufruf ist, ist das auch kein Wunder. Vielleicht solltest Du mal schauen, was der Parameter "WithSubDirs" macht, den Du mit false belegst...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr.
Seite 1 von 2  1 2      

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