Hallo! Hat mir jemand ein Beispiel wie ich alle Dateien die in den letzten fünf Tagen geändert wurden (Eigenschaften --> Erstellt im Erstellt Datum ausgeben kann zB. in eine Listbox. Es soll ein komplettes Laufwerk durchsucht werden und die Dateien die mit Pfad und Datum (erstellt) ausgegeben werden. Danke
Announcement
Collapse
No announcement yet.
GetFileTime
Collapse
X
-
Hallo,
wenn die <b>Microsoft Scripting Runtime</b> zur Verfügung steht, kann das <b>FileSystemObject</b> des Betriebssystems verwendet werden, um die Dateien zusammenzusuchen. Dazu sind die folgenden Schritte notwendig:
1. Typbibliothek der Scription Engine in Delphi importieren, indem über <i>Projekt | Typbibliothek importieren </i>der Eintrag <b>Microsoft Scripting Runtime (Version 1.0)</b> aus der Liste ausgewählt wird (Datei C:\WINNT\System32\scrrun.dll). Mit dem Button <i>Unit anlegen</i> generiert Delphi die Importunit für die Typbibliothek, die in der Uses-Klausel dann aufgeführt wird.
2. Instanz dieses Objekts anfordern, das Startverzeichnis sowie die Filterkriterien definieren. Das FileSystemObject stellt eine Vielzahl von Filterkriterien zur Verfügung. Das folgende Beispiel sucht alle Dateien, die nicht älter als 5 Tage sind im angegebenen Verzeichnis und zeigt sie in der Listbox zusammen mit dem Erstellungsdatum an:
<pre>
uses ComObj, ActiveX, Scripting_TLB;
procedure TForm1.Button1Click(Sender: TObject);
var
pEnum : IEnumVARIANT_D4 ;
vOut : VARIANT ;
dwRetrieved : DWORD ;
hRes : HResult;
aFSO : IFileSystem;
aFld : IFolder;
aFiles : IFileCollection;
aFile : IFile;
iDone : Integer;
vDOCPath : OleVariant;
begin
iDone := 0;
aFSO := CoFileSystemObject.Create;
aFld := aFSO.GetFolder('C:\Temp');
aFiles := aFld.Files;
// Alle Dateien aus diesem Verzeichnis prüfen
pEnum := aFiles.Get__NewEnum as IEnumVARIANT_D4;
while (TRUE) do
begin
hRes := pEnum.Next(1, vOut, @dwRetrieved);
if hRes <> S_OK then
Break;
aFile := IDispatch(vOut) as IFile;
if (aFile.DateCreated > (Now - 5) ) then
begin
vDOCPath := aFile.Path;
ListBox1.Items.Add(Format('%s vom %s',[vDOCPath,
DateTimeToStr(aFile.DateCreated)]));
Inc(iDone);
StatusBar1.SimpleText := IntToStr(iDone);
end;
end;
end;
</pre>
Über die IFolder-Eigenschaft <b>SubFolders</b> kann die Kollektion mit den Unterverzeichnissen angesprochen werden
Comment