Announcement

Collapse
No announcement yet.

getfile zwischen win98 und win2000 eine stunde unterschied

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • getfile zwischen win98 und win2000 eine stunde unterschied

    hallo entwickler,

    wenn ich die zeit einer datei (datei befindet auf cd-rom) auslese, dann habe ich immer eine stunde unterschied.

    gibt es vielleicht eine möglichkeit die "echte" änderungszeit auszulesen? (ohne berücksichtigung der gmt-zonen bzw. sommerzeit)

    mit dieser funktion lese ich die utc aus.

    <pre>
    function GetFileTimes(const FileName: string; var Created: TDateTime;
    var Accessed: TDateTime; var Modified: TDateTime): Boolean;
    var
    h: THandle;
    Info1, Info2, Info3: TFileTime;
    SysTimeStruct: SYSTEMTIME;
    TimeZoneInfo: TTimeZoneInformation;
    Bias: Double;
    begin
    Result := False;
    Bias := 0;
    h := FileOpen(FileName, fmOpenRead or fmShareDenyNone);
    if h > 0 then begin
    try
    if GetTimeZoneInformation(TimeZoneInfo) <> $FFFFFFFF then
    Bias := TimeZoneInfo.Bias / 1440;

    GetFileTime(h, @Info1, @Info2, @Info3);
    if FileTimeToSystemTime(Info1, SysTimeStruct) then
    Created := SystemTimeToDateTime(SysTimeStruct) - Bias;
    if FileTimeToSystemTime(Info2, SysTimeStruct) then
    Accessed := SystemTimeToDateTime(SysTimeStruct) - Bias;
    if FileTimeToSystemTime(Info3, SysTimeStruct) then
    Modified := SystemTimeToDateTime(SysTimeStruct) - Bias;
    Result := True;
    finally
    FileClose(h);
    end;
    end;
    end;

    </pre>

    gibt es vielleicht auch eine andere möglichkeit?

  • #2
    Hallo Martin,

    wenn ich Dich recht verstehe, hast Du ein Problem mit den unterschiedlichen FileTimeStamps?<br>
    Speziell unter FAT32 und NTFS?<br>

    Probier doch mal aus die Zeit mit ..ToLocalTime() zu korrigieren und dann den TimeZoneBias zu berücksichtigen?<br>

    Etwa so:
    <PRE>
    function GetFileDateTime(
    const sFilename: String
    ): TDateTime;
    var
    i : Integer;
    ft : TFileTime;
    hFile : THandle;
    tzi : _TIME_ZONE_INFORMATION;
    begin
    result := 0;
    try
    hFile := FileOpen( sFileName, fmOpenRead or fmShareDenyNone );
    if hFile > 0 then begin
    try
    if GetFileTime( hFile, nil, nil, {}@ft ) then begin
    if FileTimeToLocalFileTime( ft, {}ft ) then begin
    if FileTimeToDosDateTime( ft, LongRec( i ).Hi, LongRec( i ).Lo ) then begin
    GetTimeZoneInformation( tzi );
    result := FileDateToDateTime( i ) + ( tzi.Bias / 1440 );
    end;
    end;
    end;
    finally
    FileClose( hFile );
    end;
    end;
    except
    end;
    end;
    </PRE>

    Ich glaube das könnte helfen...

    Comment

    Working...
    X