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/)
-   -   Delphi Rekursives durchsuchen und Letzten Dateizugriff auslesen (https://www.delphipraxis.net/150387-rekursives-durchsuchen-und-letzten-dateizugriff-auslesen.html)

AnyKey 15. Apr 2010 08:16


Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Hallo,

ich habe folgendes Problem, ich will einen Ordner rekursiv durchsuchen und für alle gefundenen Dateien den Letzten Zugriff auslesen. Die Funktion sieht folgendermaßen aus:

Delphi-Quellcode:
class procedure TDataWork.GetAllFilesInDirectorys(Directory: string; List: TStrings; ClearList: Boolean);
var LastAccess : string;
var i         : Integer;
procedure ScanDir(const Directory: string);
var Mask : string;
var SR  : TSearchRec;
begin
// ToDo:
  Mask := '*.*';
  if FindFirst(Directory+Mask,faAnyFile and not faDirectory, SR) = 0 then
  begin
    try
      repeat
        List.Add(Directory+SR.Name);
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
  if FindFirst(Directory+Mask,faAnyFile,SR) = 0 then
  begin
    try
      repeat
        if ((SR.Attr and faDirectory) = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then
        begin
          ScanDir(Directory+SR.Name+'\');
        end;
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;
begin
  List.BeginUpdate;
  try
    if ClearList then
    begin
      List.Clear;
    end;
    if Directory = '' then
    begin
      Exit;
    end;
    if Directory[Length(Directory)] <> '\' then
    begin
      Directory := Directory+'\';
    end;
    Directory := Directory+'\';
    ScanDir(Directory);
    // muss das Auslesen der AccessTime hier gemacht werden? überprüfen!!!!
=>   for i := 0 to List.Count - 1 do
=>   begin
=>     LastAccess := GetLastAccessTime(List.Strings[i]);
=>   end;
  finally
    List.EndUpdate;
  end;
end;
Die Frage ist jetzt wo muss ich die mit => gekennzeichnete schleife hinpacken, damit ich die Liste durchgehen kann und ich den Letzten Dateizugriff für alle Listeneinträge auslesen kann.

Hoffe es kann jemand helfen!

Gruß
AnyKey

SirThornberry 15. Apr 2010 08:21

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Ich glaube das sinnvollste ist wenn der versuchst den aktuellen Quelltext zu verstehen. Wenn du soweit bist hat sich die eigentliche Frage erledigt.

himitsu 15. Apr 2010 08:27

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
erstmal ein paar Fragen:

Wozu 2 Schleifen, zum Auslesen des Ordners?
Es wird beide Male mit der selben Maske gesucht,
demnach könnte man Dateien und Ordner im selben Surchgang suchen.

Zitat:

// muss das Auslesen der AccessTime hier gemacht werden? überprüfen!!!!
Nee, wieso?
FindFirst und FindNext stellen dieses Datum doch auch zur Verfügung.


Ansonsten bin ich Bärchens Meinung.
Schau dir vorallem mal folgende Punkte an:
- den Typ von LastAccess
- Rückgabewert von GetLastAccessTime wirklich ein String?
- und was willst du überhaupt mit dem Datum machen
- den Nutzen der Variable Mask
- und dann auch noch das:
Zitat:

if Directory[Length(Directory)] <> '\' then
begin
Directory := Directory+'\';
end;
Directory := Directory+'\';
Welchen Wert hat Directory nach diesen Befehlen?

AnyKey 15. Apr 2010 08:33

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Ok, und wie komme ich an dieses Datum dann dran? Wie müsste ich die beiden Schleifen umbauen um nur noch eine zu haben, muss zugeben ich habe den Quellcode aus dem internet kopiert, blick also noch nich so ganz durch, wäre nett wenns mir mal einer kurz erklären könnte.

Gruß
AnyKey

AnyKey 15. Apr 2010 10:03

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Also, GetlastAccessTime gibt wirklich einen String zurück.
Also passt der Typ von LastAccess auch.
Das Datum muss mit einem anderen Datum verglichen werden.

Wie kann ich die funktion verbessern und wie komme ich wie du gesagt hast leichter und besser an das Datum des letzten Dateizugriffs heran?

Gruß
AnyKey

SirThornberry 15. Apr 2010 10:22

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Bitte unterlasse das Pushen von Beiträgen innerhalb von 24 Stunden. :)

AnyKey 15. Apr 2010 10:36

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Danke für den hinweis, werds berücksichtigen ;) hilft mir aber nich weiter... :P

hoika 15. Apr 2010 11:05

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Hallo,

wo ist überhaupt das Problem ?
Du hast eine gefüllte Liste nach ScanDir(Directory); mit Dateinamen
und willst jetzt von jeder Datei das letzte Zugriffsdatum ?


Heiko

AnyKey 15. Apr 2010 11:17

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Genau, das ist mein Problem, außerdem muss ich dann zu jeder Datei den Ersteller auslesen, das wird dann alles in eine Datenbank geschrieben.

Wäre super wenn mir jemand dabei helfen könnte, ich blick im moment garnicht mehr durch.

Edit:
Ok, ich habe einen neuen Plan, ich mach das mit dem LastAccess nachdem ich die Pfade durch die Rekursive suche ausgelesen habe, nur ist jetzt die Frage wie komme ich an die Pfade ran?

Eine Andere frage wäre noch wie ich dabei oder danach dann auch die Dateigröße/Ordnergröße herausfinden kann.

Gruß
AnyKey

p80286 15. Apr 2010 14:21

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Meiner Meinung nach hast Du 2 Möglichkeiten:
  • Erstellen einer Liste (TStringlist) mit Dateinamen
    Auslesen des Zugriffsdatums
    Auslesen des Erstellers
  • Auslesen des Dateinamens und des Zugriffsdatums in ein Record (Filename,Accessdate,Creator)
    und einfügen dieses Records in eine Liste oder gleich abspeichern in DB

wobei die erste Möglichkeit duch das mehrmalige Anpacken der Datei natürlich langsamer ist.

Gruß
K-H

edith:

Zitat:

Zitat von AnyKey

Edit:
Ok, ich habe einen neuen Plan, ich mach das mit dem LastAccess nachdem ich die Pfade durch die Rekursive suche ausgelesen habe, nur ist jetzt die Frage wie komme ich an die Pfade ran?

Was willst Du mit den Pfaden? Ich dachte es geht um Dateien?

Zitat:

Zitat von AnyKey
Eine Andere frage wäre noch wie ich dabei oder danach dann auch die Dateigröße/Ordnergröße herausfinden kann.

Die Dateigröße liefert Dir das Searchrecord, genauso wie (indirekt) das LastAccessDate (TWin32FindData).
Die "Dateigröße" (Summe der Größe der enthaltenen Dateien) bei Verzeichnissen mußt Du allerdings selbst errechnen!

AnyKey 16. Apr 2010 07:28

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Wie bekomme ich das hin, die Dateien mit Pfaden in eine Stringlist zu schreiben? Beim debuggen habe ich festgestellt das in GetAllFilesInDirectory scheinbar garnichts in die Liste geschrieben wird. Als ich das ganze aber mit einer ListBox probiert habe standen da die Dateien drin.

Und wie mache ich das, dass ich die Dateigröße auslesen kann?

Gruß
AnyKey

DeddyH 16. Apr 2010 08:27

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
:glaskugel: Du musst Zeile 34 ändern. Und schau Dir die Routine noch einmal genau an. Wenn eine Datei gefunden wird, musst Du halt zusätzlich zu TSearchRec.Name noch TSearchRec.Size auslesen.

AnyKey 16. Apr 2010 09:18

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Ist TSearchRec.Time dann die Zeit des letzten Zugriffs? Dann müsste ich nur drei oder eine Liste/n übergeben und die Werte da reinschreiben richtig? Dann könnte ich sie in meine Datenbank schreiben und später damit arbeiten. Das Problem ist nur das mit der Übergabe der liste, irgendwie steht da nichts drin wenn ich eine StringList übergebe. Hat da vielleicht jemand eine Idee?

Was genau meinst du mit Zeile 34? die Schleife in der ich die LastAccessTime auslesen wollte? Das habe ich schon raus genommen.

Edit: Vorallem, wie sieht die Time dann überhaupt aus? Da sind ja keine Punkte drin oder?

Gruß
AnyKey

DeddyH 16. Apr 2010 09:29

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Das mit Zeile 34 war ironisch gemeint, da Du uns vorenthältst, wie Du die Routine aufrufst. Und an die Zeitangaben kommst Du auf jeden Fall über TSearchRec.FindData (was einem WIN32_FIND_DATA-Record entspricht), das wurde auch bereits gesagt. Sieh Dir doch einfach genau an, wie der Record TSearchRec aufgebaut ist.

AnyKey 16. Apr 2010 10:00

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Aso ^^ ok also der Procedure kopf sieht folgendermaßen aus:

Delphi-Quellcode:
class procedure TDataWork.GetAllFilesInDirectorys(Directory: string; List: TStrings; ClearList: Boolean);
procedure ScanDir(const Directory: string);
var Mask : string;
var SR  : TSearchRec;
begin
Der Aufruf der Funktion dann so:
Delphi-Quellcode:
TDataWork.GetAllFilesInDirectorys(Pfad,List,true);
=> List ist eine Stringliste

Ist Size denn dann die Dateigröße oder muss ich SR.FindData.nFileSizeHigh nehmen? wo ist bei FileSize und DateTime der Unterschied zwischen High und Low? Den Ersteller einer Datei kann ich darüber aber nicht auslesen soweit ich das gesehen habe oder?

Danke für eure Hilfe und Geduld!

Edit: ich brauch echt hilfe, komm überhaupt nicht weiter... :( wie muss ich die Liste übergeben, damit sie gefüllt wird? Wenn ich diese Werte ausgelesen habe klappt der rest denke ich! Nur wie man den Ersteller einer Datei ausliest muss ich noch rausfinden, bzw. testen!

Gruß
AnyKey

p80286 16. Apr 2010 10:23

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Zitat:

Zitat von AnyKey

Edit: außerdem sind die beiden oben genannten Werte FileSize und DateTime vom Typ Cardinal, wie bekomme ich die in einen String, damit ich sie in die Liste schreiben kann?

AnyKey

Für "Filesize" bietet sich InttoStr an! und für "DateTime" FileDatetoDateTime.

Und was den Ersteller/Besitzer angeht dann such mal unter dem Stichwort Active Directory oder ADS.

Gruß
K-H

P.S.
Wenn Du Deinen Sourcecode als Staatsgeheimnis behandelst, ist es recht schwer Dir vernünftig zu helfen.

DeddyH 16. Apr 2010 10:47

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Wozu verlinke ich die Hilfe, wenn diese dann nicht gelesen wird? Und eine Zeitangabe enthält keine Punkte, egal, ob als FileTime oder TDateTime, da es sich um Zahlen handelt. Die Punkte kommen erst bei deren Darstellung ins Spiel, welche man ja z.B. mit FormatDateTime beeinflussen kann.

AnyKey 16. Apr 2010 11:58

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Habe mir die Hilfe durchgelesen, war auch so schlau mal in die Delphi Hilfe zu gucken. Naja ich kenn mich mit den sachen halt nicht aus, habe ich noch nie was mit gemacht. Tut mir leid wenn ich es euch unnötig schwer mache, bin froh das ihr mir helft!

Ok, das mit dem Datum und der Größe habe ich jetzt auch so, nur wie kann ich das jetzt in meine Stringlist schreiben, die ist leider immer noch leer und ich weiß nicht warum. Das Debugen hab ich schon probiert, das hilft mir nicht weiter, scheinbar schreibt er garnichts in List...

Wäre super wenn mir da noch jemand helfen könnte, das ist dann denke ich der letzte schritt.


Das ist di Funktion:
Delphi-Quellcode:
class procedure TDataWork.GetAllFilesInDirectorys(Directory: string; List: TStrings; ClearList: Boolean);
procedure ScanDir(const Directory: string);
var Mask : string;
var SR  : TSearchRec;
begin
  Mask := '*.*';
  if FindFirst(Directory+Mask,faAnyFile and not faDirectory, SR) = 0 then
  begin
    try
      repeat
        List.Add(Directory+SR.Name+'#'+IntToStr(SR.FindData.nFileSizeHigh)+'*'
                 +IntToStr(SR.FindData.ftLastAccessTime.dwLowDateTime));
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
  if FindFirst(Directory+Mask,faAnyFile,SR) = 0 then
  begin
    try
      repeat
        if ((SR.Attr and faDirectory) = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then
        begin
          ScanDir(Directory+SR.Name+'\');
        end;
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;
begin
  List.BeginUpdate;
  try
    if ClearList then
    begin
      List.Clear;
    end;
    if Directory = '' then
    begin
      Exit;
    end;
    if Directory[Length(Directory)] <> '\' then
    begin
      Directory := Directory+'\';
    end;
    Directory := Directory+'\';
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;
So versuche ich sie Aufzurufen: (wie gesagt mit einer ListBox funktionierts)
Delphi-Quellcode:
var List      : TStringList;
List := TStringList.Create;
TDataWork.GetAllFilesInDirectorys(Pfad,List,true);
Wie gesagt die Liste bleibt leer, egal was ich auch schon probiert hab.

Gruß
AnyKey

hoika 16. Apr 2010 12:01

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Hallo,

Zitat:

wie muss ich die Liste übergeben
Delphi-Quellcode:
var
  List: TStringList;
begin
  List:= TStringList.Create;

  try

    TDataWork.GetAllFilesInDirectorys(Pfad,List,true);

  finally
    List.Free;
  end;
end;
Oder was meintest du ?


Heiko

AnyKey 16. Apr 2010 12:04

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Ja das meinte ich, aber in meiner Liste steht nichts drin :(

DeddyH 16. Apr 2010 12:04

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Du musst die Liste auch erst einmal erzeugen (siehe Heikos Code).

AnyKey 16. Apr 2010 12:06

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Habe ich, hab ich oben ergänzt, hatte ich nur vergessen zu posten :P

DeddyH 16. Apr 2010 12:10

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Und wo wird "Pfad" gesetzt?

AnyKey 16. Apr 2010 12:12

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Pfad kommt aus einer Datenbank, der Pfad steht danach auch in der Variabel drin...

DeddyH 16. Apr 2010 12:16

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Dann ändere mal den "Hauptteil" der Methode.
Delphi-Quellcode:
begin
  List.BeginUpdate;
  try
    if ClearList then
    begin
      List.Clear;
    end;
    Directory := trim(Directory);
    if Directory = '' then
    begin
      Exit;
    end;
    Directory := IncludeTrailingPathDelimiter(Directory);
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;

p80286 16. Apr 2010 12:20

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Versuch es mal mit:
Delphi-Quellcode:
class procedure TDataWork.GetAllFilesInDirectorys(Directory: string;var List: TStrings; ClearList: Boolean);
Gruß
K-H

DeddyH 16. Apr 2010 12:21

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Wozu das? Objektinstanzen werden im Normalfall nicht als var übergeben.

hoika 16. Apr 2010 12:50

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Hallo,

ist ja hier egal ;)

Aber das hier könnte ein Problem sein.

Delphi-Quellcode:
Mask := '*.*';
if FindFirst(Directory+Mask
Ist Directory z.B. c:\temp kommt

c:\temp*.* raus.

Es würde der Backslash fehlen

if FindFirst(Directory+'\'+Mask[/delphi]

Wenn es das ist, du hast 2 Stellen davon im Code.

Das bekommt man aber per F5, F7, F8 leicht raus ...


Heiko

DeddyH 16. Apr 2010 12:52

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Siehe #25 ;)

hoika 16. Apr 2010 12:59

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Hallo,

ui, da war jemand schneller und ich habs überlesen ;)


Heiko

AnyKey 16. Apr 2010 12:59

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Danke für die vielen Antworten :) ich habe das von DeddyH mal kopiert und bei mir eingefügt, die Liste bleibt allerdings immer noch leer

DeddyH 16. Apr 2010 13:01

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Dann zeig doch nochmal den aktuellen Code (Methode und Aufruf komplett).

p80286 16. Apr 2010 13:14

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
@hoika
das seltsame
Delphi-Quellcode:
  if Directory[Length(Directory)] <> '\' then
    begin
      Directory := Directory+'\';
    end;
    Directory := Directory+'\';
    ScanDir(Directory);
ist ja immer noch da, der fehlende Backslash könnte es also nicht sein.

Gruß
K-H

AnyKey 16. Apr 2010 13:19

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Die Procedure:

Delphi-Quellcode:
class procedure TDataWork.GetAllFilesInDirectorys(Directory: string; List: TStrings; ClearList: Boolean);
procedure ScanDir(const Directory: string);
var Mask : string;
var SR  : TSearchRec;
begin
  Mask := '*.*';
  if FindFirst(Directory+Mask,faAnyFile and not faDirectory, SR) = 0 then
  begin
    try
      repeat
        List.Add(Directory+SR.Name+'#'+IntToStr(SR.FindData.nFileSizeHigh)+'*'
                 +IntToStr(SR.FindData.ftLastAccessTime.dwLowDateTime));
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
  if FindFirst(Directory+Mask,faAnyFile,SR) = 0 then
  begin
    try
      repeat
        if ((SR.Attr and faDirectory) = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then
        begin
          ScanDir(Directory+SR.Name+'\');
        end;
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;
begin
  List.BeginUpdate;
  try
    if ClearList then
    begin
      List.Clear;
    end;
    Directory := trim(Directory);
    if Directory = '' then
    begin
      Exit;
    end;
    Directory := IncludeTrailingPathDelimiter(Directory);
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;
und der Aufruf:
Delphi-Quellcode:
var List      : TStringList;
List := TStringList.Create;
// Pfad kommt aus einer Datenbank Inhalt: 'C:\Dokumente und Einstellungen\Beispiel'
TDataWork.GetAllFilesInDirectorys(Pfad,List,true);
Hoffe das hilft euch weiter, wie gesagt ich habe das Gefüht das er die Liste garnicht füllt in der Procedure, zumindest wird das durch debugen nicht deutlich. Wenn ich die Procedure allerdings aufrufe und eine ListBox übergebe funktioniert das ganze einwandfrei...

DeddyH 16. Apr 2010 13:23

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Bist Du mal mit F7 durchgesteppt? Werden dabei Zeilen übersprungen?

[edit] Jetzt bin ich neugierig geworden und hab das selbst ausprobiert (ein Button und ein Memo auf der Form):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var List: TStringlist;
begin
  List := TStringlist.Create;
  try
    TDataWork.GetAllFilesInDirectorys('C:\Test',List,true);
    Memo1.Lines.Assign(List);
  finally
    List.Free;
  end;
end;
Funktioniert einwandfrei, das Memo wird befüllt. [/edit]

AnyKey 16. Apr 2010 13:31

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
nein bin mit F8 durchgegangen, und ja er überspringt scheinbar immer die stelle an der eigentlich in die Liste geschrieben werden soll, das interessante ist aber dieser Aufruf funktioniert:

Delphi-Quellcode:
TDataWork.GetAllFilesInDirectorys(Edit1.Text,Listbox1.Items,True);
hier bekommt man alles in der ListBox angezeigt. Ich blick nich mehr durch und es müsste so langsam mal funktionieren... :(

Edit: Sag ich ja, ListBox funktioniert auch, nur die Stringlist nicht :( ich brauch aber keine Anzeige sondern nur die Liste...

DeddyH 16. Apr 2010 13:34

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Ich verwende da ja auch nur eine Stringliste, lasse diese befüllen und gebe sie dann im Memo aus. Klappt also, das muss irgendetwas anderes sein.

AnyKey 16. Apr 2010 13:35

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
hm... kannst du vielleicht mal deinen code posten, dann vergleich ich das noch mal mit meinem, vielleicht hab ich ja noch woanders einen fehler gemacht den ich übersehen habe...

DeddyH 16. Apr 2010 13:39

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Auch wenn das dann zum x-ten Mal hier steht, mein kompletter implementation-Abschnitt:
Delphi-Quellcode:
implementation

{$R *.dfm}

type
  TDataWork = class
  public
    class procedure GetAllFilesInDirectorys(Directory: string; List: TStrings; ClearList: Boolean);static;
  end;

class procedure TDataWork.GetAllFilesInDirectorys(Directory: string; List: TStrings; ClearList: Boolean);

procedure ScanDir(const Directory: string);
var Mask : string;
    SR  : TSearchRec;
begin
  Mask := '*.*';
  if FindFirst(Directory+Mask,faAnyFile and not faDirectory, SR) = 0 then
  begin
    try
      repeat
        List.Add(Directory+SR.Name+'#'+IntToStr(SR.FindData.nFileSizeHigh)+'*'
                 +IntToStr(SR.FindData.ftLastAccessTime.dwLowDateTime));
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
  if FindFirst(Directory+Mask,faAnyFile,SR) = 0 then
  begin
    try
      repeat
        if ((SR.Attr and faDirectory) = faDirectory) and (SR.Name <> '.') and (SR.Name <> '..') then
        begin
          ScanDir(Directory+SR.Name+'\');
        end;
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  end;
end;

begin
  List.BeginUpdate;
  try
    if ClearList then
    begin
      List.Clear;
    end;
    Directory := trim(Directory);
    if Directory = '' then
    begin
      Exit;
    end;
    Directory := IncludeTrailingPathDelimiter(Directory);
    ScanDir(Directory);
  finally
    List.EndUpdate;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var List: TStringlist;
begin
  List := TStringlist.Create;
  try
    TDataWork.GetAllFilesInDirectorys('C:\Test',List,true);
    Memo1.Lines.Assign(List);
  finally
    List.Free;
  end;
end;

AnyKey 16. Apr 2010 13:46

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
 
Ich verstehs einfach nich, wenn ich mir List.Count ausgeben lass steht da 0 drin. Das kann doch nich daran liegen das die Procedure in einer Klasse ist und ich sie von außen aufrufe....... ich weiß nich mehr weiter...


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