AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Rekursives durchsuchen und Letzten Dateizugriff auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Rekursives durchsuchen und Letzten Dateizugriff auslesen

Ein Thema von AnyKey · begonnen am 15. Apr 2010 · letzter Beitrag vom 17. Apr 2010
Antwort Antwort
Seite 1 von 8  1 23     Letzte »    
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#1

Rekursives durchsuchen und Letzten Dateizugriff auslesen

  Alt 15. Apr 2010, 09:16
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen

  Alt 15. Apr 2010, 09:21
Ich glaube das sinnvollste ist wenn der versuchst den aktuellen Quelltext zu verstehen. Wenn du soweit bist hat sich die eigentliche Frage erledigt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen

  Alt 15. Apr 2010, 09:27
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?
$2B or not $2B
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#4

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen

  Alt 15. Apr 2010, 09:33
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
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#5

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen

  Alt 15. Apr 2010, 11:03
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen

  Alt 15. Apr 2010, 11:22
Bitte unterlasse das Pushen von Beiträgen innerhalb von 24 Stunden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#7

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen

  Alt 15. Apr 2010, 11:36
Danke für den hinweis, werds berücksichtigen hilft mir aber nich weiter...
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen

  Alt 15. Apr 2010, 12:05
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
Heiko
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#9

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen

  Alt 15. Apr 2010, 12:17
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
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen

  Alt 15. Apr 2010, 15:21
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 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 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!
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 8  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 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