![]() |
AW: TZipfile - ModifiedDateTime unter Linux und MAC falsch
Zitat:
Am Anfang sah es aber erstmal so aus, daher ja meine Frage und der Post des verwendeten Beispiels... |
AW: TZipfile - ModifiedDateTime unter Linux und MAC falsch
Zitat:
|
AW: TZipfile - ModifiedDateTime unter Linux und MAC falsch
Zitat:
Zitat:
Delphi-Quellcode:
function WinFileDateToDateTime(FileDate: UInt32; out DateTime: TDateTime): Boolean; |
AW: TZipfile - ModifiedDateTime unter Linux und MAC falsch
Zitat:
Lasst es public werden... ;-) |
AW: TZipfile - ModifiedDateTime unter Linux und MAC richtig auslesen
Zitat:
FileDateToDateTime, das als Parameter ein LongInt erwartet - macht daher unter Windows den richtigen Wert draus, da UINT32 auch unter Windows ein 4 Byte Wert ist, wie eben auch LongInt. Unter Linux 64 Bit ist LongInt aber ein 8 Byte Wert, daher kann man letztlich nicht den UINT32-4-Byte Wert an eine Funktion übergeben, die unter Linux (anders als unter Windows) einen 8 Byte-Wert erwartet. "searchrec.Time" ist unter Windows ein Integer (ist unter Windows übrigens als "platform deprecated" gekennzeichnet), unter posix als time_t platform und als LongInt deklariert. Da Integer und LongInt unter Windows beides mal 4 Byte haben, macht es nichts, dass der Paramenter von FileTimeToDateTime "LongInt" ist. Aber unter Linux-64 ist LongInt eben 8 Byte. Searchrec hat es mit der oben beschriebenen Weise dann für Linux angepasst, so dass die Werte für "time" stimmen. UINT32 bleibt aber immer 4 Byte. Die Werte in Zipfile.FileInfo[c].ModifiedDateTime sind daher auch nicht falsch, sondern müssen eben je nach Plattform nur anders ausgewertet werden. Aber da muss man erst mal drauf kommen... Ich habe daher auch mal den Titel des Threads geändert in "...richtig auslesen", damit man hier nicht einen falschen Eindruck bekommt. |
AW: TZipfile - ModifiedDateTime unter Linux und MAC richtig auslesen
Zitat:
Code:
Bei Unix ist es entweder ein 32- oder 64-Bit Wert, aber in jedem Fall stehen da die Anzahl der Sekunden seit dem (oder bis zum wenn negativ) 1. Januar 1970, 00:00 Uhr. Solange diese Anzahl in 32-Bit dargestellt werden kann, spielt es keine Rolle ob es ein 32-Bit oder 64-Bit System ist. Es ist immer eine Anzahl von Sekunden. Beim MS-DOS (und somit auch Zip-)Format ist das aber völlig anders.
Bits
0- 4 Sekunden div 2 5-10 Minuten (0–59) 11-15 Stunden (0–23) 16-20 Tag (1–31) 21-24 Monat (1 = Januar, 2 = Februar, ...) 25-31 Jahr - 1980 Zitat:
|
AW: TZipfile - ModifiedDateTime unter Linux und MAC richtig auslesen
Und LONG als 8 Byte (was ja eigentlich LONG LONG wäre) ... das kann so doch auch nicht ganz richtig sein? :gruebel:
|
AW: TZipfile - ModifiedDateTime unter Linux und MAC richtig auslesen
Zitat:
2. Mit "anders auswerten" meinte ich ja auch, dass FileDateToDateTime nicht (auf allen Plattformen) verwendet werden kann... |
AW: TZipfile - ModifiedDateTime unter Linux und MAC richtig auslesen
Kurz gesagt, auf 32-Bit Posix (Longint = 4 Byte) würde es mit FileDateToDateTime trotzdem nicht funktionieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz