Delphi-PRAXiS
Seite 1 von 8  1 23     Letzte »    

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!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr.
Seite 1 von 8  1 23     Letzte »    

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