Delphi-PRAXiS
Seite 4 von 8   « Erste     234 56     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 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 14:11 Uhr.
Seite 4 von 8   « Erste     234 56     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