Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Suche eine Funktion, die mir alle Dateiinfos zurückgibt (https://www.delphipraxis.net/217448-suche-eine-funktion-die-mir-alle-dateiinfos-zurueckgibt.html)

Alallart 1. Jul 2025 11:28

Suche eine Funktion, die mir alle Dateiinfos zurückgibt
 
Ich habe kein Problem Code zu schreiben, der mir zb zu einer Datei die Dateigröße, Dateityp, Attribute, Erstelldatum, Änderungsdatum, letzter Zugriff usw. zurückgibt. Allerdings sind das immer einzelne Abfragen, und jede Abfrage kostet Zeit. Nach meinem Verständnis muss ich achtmal auf eine Datei zugreifen, wenn ich acht Angaben brauche. Deshalb meine Frage: gibt es eine Funktion die mir zb in einem Record alle Infos in einem Schritt/Zugriff zurückgibt?

dummzeuch 1. Jul 2025 11:33

AW: Suche eine Funktion, die mir alle Dateiinfos zurückgibt
 
FindFirst liefert im TSearchRec Parameter fast alles, was Du haben willst. Danach nicht vergessen, das Handle zu schließen.

Alallart 1. Jul 2025 12:01

AW: Suche eine Funktion, die mir alle Dateiinfos zurückgibt
 
Danke, ich kenne zwar TSearchRec, hatte aber im Kopf, dass einige Daten unbrauchbar sind (zb Dateigröße). Habe vergessen, dass es da noch TWin32FindData gibt.

himitsu 1. Jul 2025 12:37

AW: Suche eine Funktion, die mir alle Dateiinfos zurückgibt
 
Es gibt auch irgendein TDirectory.GetFiles (anderer Name), welches ein TArray<TSearchRec> zurück gibt, wenn ich mich nicht irre.
Oder man nutzt TDirectory.GetFiles mit einem FilterPredicate, wo man, während der Suche, Zugriff darauf bekommt.

FilterPredicate:
Man muß sein Suchergebnis ja nicht im Result speichern lassen, sondern kann es auch in einem externen Array/Liste/Dictionary speichern, mit ALLEM, was man haben möchte.

Alallart 1. Jul 2025 18:09

AW: Suche eine Funktion, die mir alle Dateiinfos zurückgibt
 
Wo ist hier der Fehler?

Delphi-Quellcode:
type
  TFileInfo = record
    FileName: string;
    FileSize: Int64;
  end;



function GetFileInfo(const FilePath: string): TFileInfo;
var
  FileInfo: TFileInfo;
  FileHandle: THandle;
  FindData: TWin32FindData;
  SystemTime: TSystemTime;
begin
  FillChar(FileInfo, SizeOf(TFileInfo), 0);

  FileInfo.FileName := ExtractFileName(FilePath);

  FileHandle := FindFirstFile(PChar(FilePath), FindData);
  if FileHandle <> INVALID_HANDLE_VALUE then
  try
    FileInfo.FileSize := (Int64(FindData.nFileSizeHigh) shl 32) + FindData.nFileSizeLow;
  finally
    FindClose(FileHandle); //<<<<<< Hier Fehlermeldung (Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen)
  end;

  Result := FileInfo;
end;
Das habe ich aus einem anderen Programm von mir kopiert, das ich schon vor Jahren erstellt habe. In dem anderen Programm gibt es keine Probleme, hier kommt die Meldung.

Auf jeden Fall sehe ich auf die Schnelle das Problem nicht.

Uwe Raabe 1. Jul 2025 18:18

AW: Suche eine Funktion, die mir alle Dateiinfos zurückgibt
 
Es gibt ein FindClose in System.SysUtils und eins in Winapi.Windows. Je nachdem wie die uses-Anweisung ist, findet der Compiler das zuletzt deklarierte.

Lösung:
Delphi-Quellcode:
Winapi.Windows.FindClose(FileHandle)
schreiben.

Alallart 1. Jul 2025 18:26

AW: Suche eine Funktion, die mir alle Dateiinfos zurückgibt
 
Das war es. Danke. Hätte mir eigentlich auch selbst einfallen können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 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