Entwickler-Ecke

Dateizugriff - DateTime TO STRING


Jakob Schöttl - Fr 06.10.06 19:23
Titel: DateTime TO STRING
<SearchRec.FindData.ftLastAccessTime.dwLowDateTime TO STRING>

HI

Ich muss die letzte zugriffszeit von einigen dateien wissen. dazu hab ich SearchRec.FindData.ftLastAccessTime.dwLowDateTime genommen bzw. dwHightDateTime.

Jetzt weiß ich nur nciht, wie ich das in das normale DateTime und somit in einen Str konvertieren kann. Ich hab keine Konvertierungsfunktion gefunden.

Ich hoffe ihr könnt mir helfen!


Chryzler - Fr 06.10.06 20:55

Was für ein Typ ist denn dieses dwLowDateTime? In der Hilfe steht auch nix?


Jakob Schöttl - Sa 07.10.06 10:01

Also, dwLowDateTime ist fast das gleiche wie dwHightDateTime; beide sind im Record ftLastAccessTime und haben den Typ Cardinal, also DoubleWord;

Delphi-Quelltext
1:
2:
3:
4:
  _FILETIME = record
    dwLowDateTime: DWORD;
    dwHighDateTime: DWORD;
  end;


TSearchRec ist ja in der delphi-Hilfe noch referenziert, aber seine Records (plattformspezifisch) nicht.


GTA-Place - Sa 07.10.06 10:13

In der Hilfe ist die Funktion FileDateToDateTime beschrieben. Schon gesehen?


Jakob Schöttl - Sa 07.10.06 10:21

ja danke, aber die hab ich schon probiert, und da kam eine exception: "unerwartetes Format" oder so. Der parametertyp hat schon gestimmt, aber er konnte es habl nciht konvertieren


GTA-Place - Sa 07.10.06 10:24

Ich hab es gerade ausprobiert, da kam keine Fehlermeldung o_O.


Jakob Schöttl - Sa 07.10.06 12:36

Ich hab grad rausgefunden:

Delphi-Quelltext
1:
2:
3:
4:
5:
//hier gibts einen Fehler
DateTimeToStr(FileDateToDateTime(SearchRec.FindData.ftLastAccessTime.dwHighDateTime))

//und hier nicht
DateTimeToStr(FileDateToDateTime(SearchRec.FindData.ftLastAccessTime.dwLowDateTime))

Ich hab also den niedrige n Zeitstempel genommen, aber da kommt was raus, was nicht sein kann, nähmlich als Jahr 1986. Das kann glaub ich nicht sein, weil ich die dateien vor 1 Jahr installiert hab.

und jetzt kam grad auch bei dem dwLowDateTime eine Exception: 'Ungültiges Argument zum zum Codieren des Datums' der Klasse EConvertError;


Jakob Schöttl - So 13.05.07 12:41


Delphi-Quelltext
1:
2:
SearchRec.FindData.ftLastAccessTime.dwHighDateTime
SearchRec.FindData.ftLastAccessTime.dwLowDateTime


Mir ist jetzt eingefallen, dass das Low und High zusammengehören. Das Nieder- und Höherwertige DoppelWort...

Aber wie man das konvertieren könnte weiß ich immer noch nicht.


Chryzler - So 13.05.07 13:43

Vielleicht geht das?

Delphi-Quelltext
1:
  DateTimeToStr(FileDateToDateTime(SearchRec.FindData.ftLastAccessTime));                    

Ansonsten musst du eben die High- und Low-Bytes zu einem zusammenfügen. Geht glaub ich ungefähr mit together := (High shl 32) + Low;


Jakob Schöttl - So 13.05.07 20:23

aja, das könnte gehen, aber wenn ich "LastAccess" nehme, dann hab ich die letzte zugriffszeit und nciht die erstellungszeit.


GTA-Place - So 13.05.07 21:32

Dann nimm doch ftCreationTime.


Jakob Schöttl - Mo 14.05.07 14:13

user profile iconGTA-Place hat folgendes geschrieben:
Dann nimm doch ftCreationTime.
ja, aber es ging ja darum den Record mit zwei DWORDs in eine gültige Zeit umzuwandeln.


Lannes - Mo 14.05.07 15:39

Hallo,

so funktioniert es in meiner Anwendung:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var LTime : TFileTime;
    SystemTime : TSystemTime;
begin
   //..
  FileTimeToLocalFileTime(SR.FindData.ftLastAccessTime, LTime);
  FileTimeToSystemTime(LTime, SystemTime); 
  showmessage(FormatDateTime('dd/mm/yyyy hh:nn:ss',SystemTimeToDateTime(SystemTime)));