Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit Funktion: GetFileLastAccessTime (https://www.delphipraxis.net/45183-problem-mit-funktion-getfilelastaccesstime.html)

SiMc 1. Mai 2005 14:39


Problem mit Funktion: GetFileLastAccessTime
 
Hallo

Ich habe hier ein bisschen rumgesucht, weil ich eine Funktion/Prozedur brauchte, um den letzten Zugriff einer Datei auszulesen.

Dabei habe ich dashier gefunden:

Delphi-Quellcode:
function GetFileLastAccessTime(sFileName: string): TDateTime;
var
  ffd: TWin32FindData;
  dft: DWORD;
  lft: TFileTime;
  h:  THandle;
begin
  //
  // get file information
  h := Windows.FindFirstFile(PChar(sFileName), ffd);
  if (INVALID_HANDLE_VALUE <> h) then
  begin
    //
    // we're looking for just one file,
    // so close our "find"
    Windows.FindClose(h);
    //
    // convert the FILETIME to
    // local FILETIME
    FileTimeToLocalFileTime(ffd.ftLastAccessTime, lft);
    //
    // convert FILETIME to
    // DOS time
    FileTimeToDosDateTime(lft, LongRec(dft).Hi, LongRec(dft).Lo);
    //
    // finally, convert DOS time to
    // TDateTime for use in Delphi's
    // native date/time functions
    Result := FileDateToDateTime(dft);
  end;
end;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := DateTimeToStr(GetFileLastAccessTime('C:\datei.dat'));
end;
Das Problem ist, dass ich nicht das Datum/die Uhrzeit vom letzten Zugriff bekomme, sondern das von der letzten Änderung.
Also ob ich oben in der Funktion das hier
Delphi-Quellcode:
    FileTimeToLocalFileTime(ffd.ftLastAccessTime, lft);
oder
Delphi-Quellcode:
    FileTimeToLocalFileTime(ffd.ftLastWriteTime, lft);
stehen habe macht keinen Unterschied.


Gibt es denn vielleicht noch eine andere Möglichkeit den letzten Zugriff zu lesen?


-SiMc

Basilikum 1. Mai 2005 15:58

Re: Problem mit Funktion: GetFileLastAccessTime
 
Zwei mögliche Gründe dafür:
  • Nicht alle Dateisysteme unterstützen diese Funktion (NTFS: Ja / FAT: nein)
  • Das Nachführen des Datums des letzen Zugriffes lässt sich per Registry deaktivieren (Performance-Gewinn)

marabu 1. Mai 2005 16:38

Re: Problem mit Funktion: GetFileLastAccessTime
 
Zitat:

Zitat von Basilikum
Nicht alle Dateisysteme unterstützen diese Funktion (NTFS: Ja / FAT: nein)

Zitat:

Zitat von Microsoft
the FILETIME members are zero if the file system does not support this time member

Das nenne ich unvereinbare Standpunkte!

Zitat:

Zitat von SiMc
Gibt es denn vielleicht noch eine andere Möglichkeit den letzten Zugriff zu lesen?

Klar: GetFileTime();

Grüße vom marabu

Sprint 1. Mai 2005 16:50

Re: Problem mit Funktion: GetFileLastAccessTime
 
Delphi-Quellcode:
function GetFileLastAccess(const FileName: String): TDateTime;
var
  SR: TSearchRec;
  stUTC, stLocal: TSystemTime;
begin

  Result := 0;

  if FindFirst(FileName, faAnyFile, SR) = 0 then
  begin
    if FileTimeToSystemTime(SR.FindData.ftLastAccessTime, stUTC) then
      if SystemTimeToTzSpecificLocalTime(nil, stUTC, stLocal) then
        with stLocal do
          Result := EncodeDateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds);
    FindClose(SR);
  end;

end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 Uhr.

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