Entwickler-Ecke

Dateizugriff - DateiInfos


mimi - Sa 02.08.03 21:01
Titel: DateiInfos
Hallo,
habe die suchfunktion gefunden wurde auch fündig, doch leider geht das nicht was ich haben will.
ich brauche folgnede infos von der datei
1: Erstellungs Datum\Uhrzeit der Datei
2: Änderungs Datum\Uhrzeit der Datei
3: Letzer lese zugrief der datei

habe es mit folgender funktion versucht:

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:
procedure TMfa.Packe;
var
  Datei:TStream;
  i,len:Integer;
  DateiHeader:String;
begin
  Datei := TFileStream.Create(FileName, fmCreate);
  
  Len:=Dateien.Count;
  Datei.Write(Len, SizeOf(Len));

  for i:=0 to Dateien.Count-1 do begin                                                                      
    DateiHeader:=Dateien.Strings[i] + ';'
                 + DateTimeToStr(FileDateToDateTime(FileAge(Dateien.Strings[i]))) + ';'
                 + DateTimeToStr(FileTimeToDateTime(GetFileLastWrite(Dateien.Strings[i]))) + ';'
                 + DateTimeToStr(FileTimeToDateTime(GetFileLastAccess(Dateien.Strings[i])))+ ';'
                 + 'Größe' + ';' + 'Beschreibung' + ';' + 'PositionA' + ';' + 'PositionE';
    Len:=StrLen(PChar(DateiHeader));
    Datei.Write(Len, SizeOf(Len));
    Datei.Write(PChar(DateiHeader)^,Len);
    DateiHeader:='';
  end;
  Datei.Free;  
end;

doch leider wird immer nur der letzeschreibzugrief abgespeicher warum ?


Tryer - Sa 02.08.03 22:39

- FileAge gibt auch nur den Zeitpunkt des letzten Schreibzugriffes an, liefert also nicht mehr Informationen als GetFileLastWrite.

- Das Datum des letzten Zugriffs wird im FAT / FAT32-Dateisystem nicht vermerkt, es steht nur unter NTFS zur Verfügung. (Und auch da nur optinal, das Speichern dieser Information läßt sich über die Registry abschalten)

MfG,
Tryer


mimi - Sa 02.08.03 22:45

achso, aber wenn ich auf ein laufwerk bin was mit fat16 ? fomatier ist zeigt mir windows auch diese infos an oder dos....

und wie kann ich das jetzt machen ?
arbeite heute zum erstenmal mit TFieleStream und habe das primzip auch soweit verstanden.
jetzt wollte ich einfach ein arichvprogramm schreiben(so wie tar)
und wollte das oben der datei hader steht der soll folgender masen aufgebaut sein:
Verzeichnisname + Dateiname; Erstellungsdatum\Uhrzeit der datei Lezterzugrif(Datum\Uhrzeit); Letzer schreibzugrief: Datei Größe. und noch die position wie das progamm die datei findet wie und wie weit es lesen darf......


mimi - Sa 02.08.03 23:09

ich habe das jetzt soweit geschaft, doch leider sind diese funktionen womit ich es mache zwei stunden zurück wie ich gemerkt habe.
ich nutze FindFirst und fertig.
aber egal welche funktion ich nutz delphi ist zwei stunden zurück wobei die Windows uhr genau geht, wie kann ich Delphi beibringen das es zwei stunden dazurechnet ???


Tryer - Sa 02.08.03 23:58

Ist vielleicht noch ein FileTimeToLocalFileTime nötig ?

MfG,
Tryer


Delete - So 03.08.03 00:42

FindFirst liefert wohl das Datum und ie Uhrzeit als UTC-Zeit.


mimi - So 03.08.03 10:52

was heiß "UTC-Zeit"?
werde ich mal ausprobieren...


mimi - So 03.08.03 11:03

was heiß "UTC-Zeit"?
werde ich mal ausprobieren...

Edit:
es funktioniert, die zeiten werden richtig ausgeben, danke....


mimi - So 03.08.03 12:55

weiß den fehler:
1. D = 4
2. D = 140
3. D = 276
4. D = 412

kann mir wer ne rechnung sagen wie ich jetzt die postion erechnen kann da folgendes passieren kann:
die länge der datensätze ist variable und die pos kann es auch sein.


Delete - So 03.08.03 13:42

Was hast du jetzt für ein Problem mit "Datensätzen"? Ich dachte es geht um das Datum und die Zeit?


Tryer - So 03.08.03 13:45

Das Posting sollte wohl eigentlich da [http://www.delphi-forum.de/viewtopic.php?t=14660] hin ;)

MfG,
Tryer