Delphi-PRAXiS
Seite 2 von 8     12 34     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 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 :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 Uhr.
Seite 2 von 8     12 34     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