AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Timestap auslesen von einer datei funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Timestap auslesen von einer datei funktioniert nicht

Ein Thema von gsh · begonnen am 30. Apr 2007 · letzter Beitrag vom 30. Apr 2007
Antwort Antwort
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#1

Timestap auslesen von einer datei funktioniert nicht

  Alt 30. Apr 2007, 12:44
Hi DPler

Hab mal wieder ein Problem für euch

Ich will den Timestap einer datei auslesen (aber nur den "Geändert am"). Dazu verwende ich folgende Funktion:
Delphi-Quellcode:
function GetFileLastModifiedTimeStap(const FileName: string) : TDateTime;
var
  FileHandle : THandle;
  DateInfo: TFileTime;
  SysTimeStruct: SYSTEMTIME;
  TimeZoneInfo: TTimeZoneInformation;
  Bias: Double;
begin
  Result := 2; //01.01.1900 00:00:00
  Bias := 0;
  FileHandle := FileOpen(FileName, fmOpenRead or fmShareDenyWrite);
  if FileHandle > 0 then
  begin
    try
      if GetTimeZoneInformation(TimeZoneInfo) <> $FFFFFFFF then Bias := TimeZoneInfo.Bias / 1440; // 60x24
      GetFileTime(FileHandle, nil, nil, @DateInfo);
      if FileTimeToSystemTime(DateInfo, SysTimeStruct) then result := SystemTimeToDateTime(SysTimeStruct) - Bias;
    finally
      FileClose(FileHandle);
    end;
  end;
end;
So diese Funktion funktioniert eigentlich ganz gut. Bis auf des das eine Stunde fehlt. D.h. das programm sagt 12:42:00 meine systemuhr aber 13:42:00
natürlich könnte ich jetzt einfach eine stunde dazu zählen nur weiß ich nicht wie sich des auf anderen System (mit anderen Zeitzonen ...) auswirkt
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#2

Re: Timestap auslesen von einer datei funktioniert nicht

  Alt 30. Apr 2007, 12:46
Wofür steht denn dein $FFFFFFFF? (sehs gerade, TIME_ZONE_ID_INVALID...)
Als Rückgabewert für GetTimeZoneInformation kenn ich da noch TIME_ZONE_ID_DAYLIGHT, was für eine Stunde Versatz sprechen würde Werte das Rückgabeergebnis mal genauer aus, dann klappts auch mit der Sommerzeit.
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#3

Re: Timestap auslesen von einer datei funktioniert nicht

  Alt 30. Apr 2007, 12:50
Zitat von CCRDude:
Als Rückgabewert für GetTimeZoneInformation kenn ich da noch TIME_ZONE_ID_DAYLIGHT, was für eine Stunde Versatz sprechen würde Werte das Rückgabeergebnis mal genauer aus, dann klappts auch mit der Sommerzeit.
ahm ja ... und wie mach ich des?
ah stimmt an der sommerzeit kann es liegen
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#4

Re: Timestap auslesen von einer datei funktioniert nicht

  Alt 30. Apr 2007, 12:53
Wie, wie machst Du das?

Jetzt nur mal grob auswendig umgewandelt:

Delphi-Quellcode:
cTZI := GetTimeZoneInformation(TimeZoneInfo);
if cTZI <> $FFFFFFFF
 then Bias := TimeZoneInfo.Bias / 1440;
if cTZI = TIME_ZONE_ID_DAYLIGHT
 then Inc(Bias, 60);
Kann auch Dec statt Inc sein, bin zu faul jetzt nachzudenken, wierum Du da verschiebst
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#5

Re: Timestap auslesen von einer datei funktioniert nicht

  Alt 30. Apr 2007, 13:04
k danke

super danke es funktioniert jetzt:
Delphi-Quellcode:
function GetFileLastModifiedTimeStap(const FileName: string) : TDateTime;
var
  FileHandle : THandle;
  DateInfo: TFileTime;
  SysTimeStruct: SYSTEMTIME;
  TimeZoneInfo: TTimeZoneInformation;
  Bias: Double;
begin
  Result := 2; //01.01.1900 00:00:00
  FileHandle := FileOpen(FileName, fmOpenRead or fmShareDenyWrite);
  if FileHandle > 0 then
  begin
    try
      if GetTimeZoneInformation(TimeZoneInfo) <> $FFFFFFFF then
      begin
        Bias := TimeZoneInfo.Bias / 1440; // 60x24
        if GetTimeZoneInformation(TimeZoneInfo) = TIME_ZONE_ID_DAYLIGHT then Bias := Bias - (60 / 1440);
        GetFileTime(FileHandle, nil, nil, @DateInfo);
        if FileTimeToSystemTime(DateInfo, SysTimeStruct) then result := SystemTimeToDateTime(SysTimeStruct) - Bias;
      end;
    finally
      FileClose(FileHandle);
    end;
  end;
end;
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 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