Autor Beitrag
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Di 02.04.13 09:52 
Hallo liebe Delphi-Helfer :)

Um das Erstelldatum einer Datei auszulesen habe ich immer folgende Function verwendet:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function TFuP_S._Erstelldatum(Dateipfad: String) : TDateTime;
var
  SR: TSearchRec;
  SystemTime: TSystemTime;
  NewCreationTime: TFileTime;
begin
  // Variable initialisieren
  Result:= 0;
  // Erstelldatum ermitteln
  if FindFirst(Dateipfad, faAnyFile, SR) = 0 then
  begin
    if (Windows.FileTimeToLocalFiletime(SR.FindData.ftCreationTime, NewCreationTime) and Windows.FileTimeToSystemTime(NewCreationTime, SystemTime)) then
    begin
      Result:= Encodedate(SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay) + Encodetime(SystemTime.wHour, SystemTime.wMinute,SystemTime.wSecond, SystemTime.wMilliseconds);
    end;
  end;
end;


Das klappt fast das ganze Jahr.
Nur heute habe ich ein Problem :(

Eine Datei die am 29.03. um 23:45 erstellt wurde, wird mir mit 30.03. 00:45 angezeigt :(

Da das Datum jetzt unterschiedlich ist, erkennt mein Programm die falschen Daten, so liest er mir nun die Datei aus die am 28.03 erstellt wurde, weil sie nun den 29. anzeigt :(

Kann ich der Funktion irgendwie sagen, dass sie mir die echte Zeit anzeigen soll, ganz gleich ob Zeitumstellung oder nicht.

Hoffe jemand hat einen Rat.

Moderiert von user profile iconMartok: Code- durch Delphi-Tags ersetzt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 02.04.13 10:22 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
uses DateUtils;

function GetFileCreationDateTime(const Filename: string): TDateTime;
var
  f: TSearchRec;
  t: _FILETIME;
  s, lt: _SYSTEMTIME;
  i: _TIME_ZONE_INFORMATION;
begin
  Result := 0;
  try
    if FindFirst(Filename, faAnyFile, f) = 0 then
    begin
      t := f.FindData.ftCreationTime;
      if FileTimeToSystemTime(t, s) then
        if GetTimeZoneInformation(i) <> TIME_ZONE_ID_INVALID then
        begin
          SystemTimeToTzSpecificLocalTime(@i, s, lt);
          Result := EncodeDateTime(lt.wYear, lt.wMonth, lt.wDay, lt.wHour, lt.wMinute, lt.wSecond, lt.wMilliseconds);
        end;
    end;
  finally
    FindClose(f)
  end
end;

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: Jakane
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Di 02.04.13 10:34 
mein Retter, danke :D