Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dateidatum simple ermitteln (https://www.delphipraxis.net/137679-dateidatum-simple-ermitteln.html)

Coder 26. Jul 2009 14:28


Dateidatum simple ermitteln
 
Hallo, und zwar möchte ich recht einfach das Datum einer Datei ermitteln.

Hierzu habe ich bisher immer folgende selbstgebastelte Function verwendet, wollte aber nun mal fragen, ob es da nicht was effizienteres gibt?

Delphi-Quellcode:
function DateSizeOfFile(Fname: string): string;
var Rec: TSearchRec;
  sim: string;
  Filename, Path: string;

begin
  Path := '';
  FileName := Fname;
  if FindFirst(Path + FileName, faAnyFile - faDirectory, Rec) = 0 then
  try
    repeat

          Sim := Datetimetostr(FileDateToDateTime(Rec.Time)) + ' '+ inttostr(Rec.Size)+ ' Byte';
    until FindNext(Rec) <> 0;
  finally
    FindClose(Rec);
    result := Sim;
  end;
end;

xZise 26. Jul 2009 14:34

Re: Dateidatum simple ermitteln
 
Moin Coder,

soll das so sein, dass nur die letzten Dateiinfos zurückgegeben werden?
Wenn ja, dann könntest du dir das ständige codieren sparen. Stattdessen speicherst du das SearchRec zwischen und sobald er die Schleife verlässt nimmt er das zwischengespeicherte Rec und liest daraus die Daten aus?

Und TimeD/SizeD werden gar nicht verwendet?

MfG
xZise

Coder 26. Jul 2009 14:47

Re: Dateidatum simple ermitteln
 
äh, wie meinste Zwischenspeichern?
was meinste mit ständigem Codieren?

zudem wollte ich fragen, ob man diese Function (immer das ganze Verzeichnis nach einem Dateinamen scannen, nur um Dateidatum und Größe EINER einzelnen Datei herauszubekommen) auf etwa z.B. 1 Zeile Code reduzieren könnte?
Oder geht das am besten nur über den SearchRec?

Luckie 26. Jul 2009 15:01

Re: Dateidatum simple ermitteln
 
Also wenn du die datei kennt, kannst du sie natürlcih direkt angeben. Ich verstehe deinen Code sowieso nicht so ganz. Du kennst offensichtlich den dateinamen:
Delphi-Quellcode:
function DateSizeOfFile(Fname: string): string;
Und läufst trotzdem in einer Schleife alle Dateien durch oder was machst du da?

Coder 26. Jul 2009 15:22

Re: Dateidatum simple ermitteln
 
Zitat:

Zitat von Luckie
Also wenn du die datei kennt, kannst du sie natürlcih direkt angeben. Ich verstehe deinen Code sowieso nicht so ganz. Du kennst offensichtlich den dateinamen:
Delphi-Quellcode:
function DateSizeOfFile(Fname: string): string;

ja, so rufe ich die Funktion auf:

Edit2.text := DateSizeOfFile (Edit1.text);
Zitat:

Und läufst trotzdem in einer Schleife alle Dateien durch oder was machst du da?
ja, ich weiß, das hab ich aus einer Function gekürz, die mir alle Dateien in einem Verzeichnis auflistet. Und da ich jetzt nur noch das Dateidatum +Größe brauchte ...

Aber wie soll ich denn sonst an das Dateidatum kommen?
Es geht doch vermutlich nur über den Searchrec, oder?

Wie kann ich denn sonst einfach nur Dateidatum und Größe ermitteln?
Wie machst Du das denn? Oder Ihr?

himitsu 26. Jul 2009 15:43

Re: Dateidatum simple ermitteln
 
Es gibt da eine Funktion und die nennt sich MSDN-Library durchsuchenGetFileTime ... schon witzig, niwa?

zu deiner Funktion:
  • wozu das leere Path?
  • Filename kann man direkt verwenden ... muß man nicht erst umkopieren
  • die Repeat-FindNext-Schleife kann weg ... wenn du den richtigen Dateinamen angibst, dann sollte es der erste Eintrag sein, also der von FindFirst

Delphi-Quellcode:
function DateSizeOfFile(FileName: String): String;
var Rec: TSearchRec;
begin
  if FindFirst(FileName, faAnyFile and not faDirectory, Rec) = 0 then
  begin
    try
      Result := DateTimeToStr(FileDateToDateTime(Rec.Time)) + ' ' + IntToStr(Rec.Size) + ' Byte';
    finally
      FindClose(Rec);
    end;
  end
  else Result := '';
end;
da FindClose das Suchrgebnis nicht löscht, kann man es so kürzen
Delphi-Quellcode:
function DateSizeOfFile(FileName: String): String;
var Rec: TSearchRec;
begin
  if FindFirst(FileName, faAnyFile and not faDirectory, Rec) = 0 then
  begin
    FindClose(Rec);
    Result := DateTimeToStr(FileDateToDateTime(Rec.Time)) + ' ' + IntToStr(Rec.Size) + ' Byte';
  end
  else Result := '';
end;

DeddyH 26. Jul 2009 15:52

Re: Dateidatum simple ermitteln
 
Bitte bitte, keine Subtraktion bei Bitmasken (auch wenn es in diesem Fall keine Rolle spielen sollte).
Zitat:

Delphi-Quellcode:
faAnyFile - faDirectory

Lieber
Delphi-Quellcode:
faAnyFile and not faDirectory
, dann kann ich besser schlafen ;)

Coder 26. Jul 2009 16:14

Re: Dateidatum simple ermitteln
 
erst Mal Danke,

das mit GetFileTime() war mir damals zu kompliziert. (Das Datum und die Zeit entsprechend daraus für meinen benötigten String zu Formatieren)
ist igendwie heute auch nicht anders :D
daher mein Umweg über den TSearchRec.


Puhh, Ihr seid aber streng (Syntax) ... :zwinker:

himitsu 26. Jul 2009 16:48

Re: Dateidatum simple ermitteln
 
man könnte auch MSDN-Library durchsuchenGetFileAttributesEx nehmen

MSDN-Library durchsuchenGetFileTime ist eigentlich nicht schwer anzuwenden.
man muß sich nur per MSDN-Library durchsuchenCreateFile ein Handle besorgen :zwinker:,
aber einen Nachteil hat es ... ist kein Zugriff auf die Datei möglich (z.B. schon exklusiv geöffnet oder fehlende Rechte), dann bekommt man kein Handle.

Luckie 26. Jul 2009 20:30

Re: Dateidatum simple ermitteln
 
Zitat:

Zitat von Coder
ja, ich weiß, das hab ich aus einer Function gekürz, die mir alle Dateien in einem Verzeichnis auflistet. Und da ich jetzt nur noch das Dateidatum +Größe brauchte ...

Aber verstanden hast du sie nicht. Was meinst du hat SearchRect in dieser Zeile für Werte, wenn die Datei gefunden wird:
Delphi-Quellcode:
if FindFirst(Path + FileName, faAnyFile - faDirectory, Rec) = 0 then


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr.
Seite 1 von 2  1 2      

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