Entwickler-Ecke

Dateizugriff - "geändert am:" einer Datei auslesen


Bergmann89 - Fr 30.01.09 20:22
Titel: "geändert am:" einer Datei auslesen
HI,

wie der Titel schon sagt würd ich gern wissen wann eine Datei geändert wurde.
Gibts da ne Funktion die das ausließt?

MfG & Thx Bergmann.


Delete - Fr 30.01.09 20:29

Versuch es mal mit GetFileTime [http://msdn.microsoft.com/en-us/library/ms724320(VS.85).aspx]. Für Dich wäre dann der Parameter lpLastWriteTime interessant.


Bergmann89 - Sa 31.01.09 16:08

HI,

ich komm mit der Fukntion irgendwie nich klar, kannst du vlt ma noch n Anwendungsbeispiel posten?

MfG & Thx Bergmann.


Delete - Sa 31.01.09 16:31

Versuch es mal mit dieser Funktion:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function FileLastModified(const sFile: TFilename): TDateTime;
var sr: TSearchRec;
    tzi: TTimeZoneInformation;
    lt, st: TSystemTime;
begin
  if FindFirst(sFile, faAnyFile, sr) = 0 then
    begin
      GetTimeZoneInformation(tzi);
      FileTimeToSystemTime(sr.FindData.ftLastWriteTime, st);
      SystemTimeToTzSpecificLocalTime(@tzi, st, lt);
      Result := SystemTimeToDateTime(lt);
      SysUtils.FindClose(sr);
    end
  else
    Result := 0;
end;


jaenicke - Sa 31.01.09 16:45

Ein Beispiel findest du hier:
http://msdn.microsoft.com/en-us/library/ms724926.aspx

Ich habe das mal nach Delphi übersetzt (ungetestet, hab grad kein Delphi hier):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function MyGetFileTime(FileName: PChar): TDateTime;
var
  FileHandle: Cardinal;
  LastWriteTime: TFileTime;
  UTCSystemTime, LocalSystemTime: TSystemTime;
begin
  Result := 0;
  FileHandle := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ,
    nil, OPEN_EXISTING, 00);
  if FileHandle = INVALID_HANDLE_VALUE then
    Exit;
  if not GetFileTime(FileHandle, nilnil, @LastWriteTime) then
    Exit;
  FileTimeToSystemTime(LastWriteTime, UTCSystemTime);
  SystemTimeToTzSpecificLocalTime(nil, UTCSystemTime, LocalSystemTime);
  Result := SystemTimeToDateTime(LocalSystemTime);
  CloseHandle(FileHandle);
end;
Verwendungsbeispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  WriteTime: TDateTime;
begin
  if OpenDialogX.Execute then
  begin
    WriteTime := MyGetFileTime(PChar(OpenDialogX.FileName));
    if WriteTime <> 0 then
      ShowMessage(DateTimeToStr(WriteTime))
    else
      ShowMessage('Fehler');
  end;