![]() |
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
|
Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
Dann zeig doch nochmal den aktuellen Code (Methode und Aufruf komplett).
|
Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
@hoika
das seltsame
Delphi-Quellcode:
ist ja immer noch da, der fehlende Backslash könnte es also nicht sein.
if Directory[Length(Directory)] <> '\' then
begin Directory := Directory+'\'; end; Directory := Directory+'\'; ScanDir(Directory); Gruß K-H |
Re: Rekursives durchsuchen und Letzten Dateizugriff auslesen
Die Procedure:
Delphi-Quellcode:
und der Aufruf:
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;
Delphi-Quellcode:
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...
var List : TStringList;
List := TStringList.Create; // Pfad kommt aus einer Datenbank Inhalt: 'C:\Dokumente und Einstellungen\Beispiel' TDataWork.GetAllFilesInDirectorys(Pfad,List,true); |
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:
Funktioniert einwandfrei, das Memo wird befüllt. [/edit]
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; |
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:
hier bekommt man alles in der ListBox angezeigt. Ich blick nich mehr durch und es müsste so langsam mal funktionieren... :(
TDataWork.GetAllFilesInDirectorys(Edit1.Text,Listbox1.Items,True);
Edit: Sag ich ja, ListBox funktioniert auch, nur die Stringlist nicht :( ich brauch aber keine Anzeige sondern nur die Liste... |
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.
|
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...
|
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; |
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 02:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz