Datei Eigenschaften Ermitteln .. [gelöst]

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1619
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Datei Eigenschaften Ermitteln .. [gelöst]

Beitrag von corpsman »

Guten Morgen allerseits,

Ich versuche verzweifelt an die "Last Modified" Informationen von Dateien heran zu kommen, doch irgendwie geht es nicht :

Weder mit FileAge, noch mit dem TSearchRec geht es :(.

Funktionieren sollte es in erster Linie auf meinem Linux (Kubuntu 10.4, 32-Bit) System, wenns Plattform unabhängig wäre es natürlich der Brüller ;)

Die Attribute sezten kann ich ( mittels TProcess und dem "Finger" Befehl ), nur lesen eben nicht :(

Alle unten gezeigten Varianten scheinen immer die "Last Access" Informationen zu geben.

Code: Alles auswählen

Type
  Tinfo = Record
    lastchanged: Longint;
    name: String;
  End;
 
Var
  sr1: TSearchRec;
  info1: Array Of TInfo;
Begin
  setlength(info1, 0);
  // Suchen Aller Dateien in Path1
  If FindFirst(Dateiname, faAnyFile, SR1) = 0 Then Begin
    Repeat
      If (SR1.Attr And FaDirectory = 0) Then Begin
        If (sr1.Name <> '.') And (sr1.Name <> '..') Then Begin
          setlength(info1, high(info1) + 2);
          (*
          Diese Funktion scheint leider immer noch nicht dir Richtige zu sein!!
 
          Gesucht ist die Zuletzt Zugegriffen Funktion !!
          *)
          info1[high(info1)].lastchanged := sr1.Time; //FileAge(path1 + sr1.Name);
          info1[high(info1)].name := path1 + sr1.Name;
        End;
      End
    Until FindNext(SR1) <> 0;
..
Zuletzt geändert von corpsman am Sa 18. Sep 2010, 16:33, insgesamt 1-mal geändert.
--
Just try it

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Datei Eigenschaften Ermitteln ..

Beitrag von Targion »

Probiere mal die funktion "GetFTime" aus der Unit "Dos" aus:

Code: Alles auswählen

Function L0(w:word):string;
var
  s : string;
begin
  Str(w,s);
  if w<10 then
   L0:='0'+s
  else
   L0:=s;
end;
 
var
  f    : File;
  Time : Longint;
  DT   : DateTime;
begin
  if Paramcount>0 then
    Assign(f,ParamStr(1))
  else
    halt(1);
  Reset(f);
  GetFTime(f,Time);
  Close(f);
  UnPackTime(Time,DT);
  Write ('Datei ',ParamStr(1),' wurde zuletzt am ');
  Writeln (L0(DT.Month),'-',L0(DT.Day),'-',DT.Year,
           ' um ',L0(DT.Hour),':',L0(DT.Min), ' verändert.');
end.

Benutzeravatar
theo
Beiträge: 10871
Registriert: Mo 11. Sep 2006, 19:01

Re: Datei Eigenschaften Ermitteln ..

Beitrag von theo »

http://www.freepascal.org/docs-html/rtl ... pstat.html" onclick="window.open(this.href);return false;

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1619
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Datei Eigenschaften Ermitteln ..

Beitrag von corpsman »

Meine Interpretation von Theo's Tipp gibt mir ein Datum um 2018 :)

Code: Alles auswählen

Procedure TForm1.Button2Click(Sender: TObject);
Var
  bu: Stat;
  t: Cardinal;
  dt: DateTime;
Begin
  If opendialog1.execute Then Begin
    FpStat(opendialog1.FileName, bu);
    t := bu.mtime;
    UnPackTime(T, DT);
    showmessage(
      inttostr(dt.Day) + '.' +
      inttostr(dt.Month) + '.' +
      inttostr(dt.Year) + ' ' +
      inttostr(dt.Hour) + ':' +
      inttostr(dt.Min) + '.' +
      inttostr(dt.Sec));
  End;
End;
Die Version von Targion funktioniert 1a

Code: Alles auswählen

Procedure TForm1.Button3Click(Sender: TObject);
Var
  f: File;
  Time: Longint;
  DT: DateTime;
Begin
  If opendialog1.execute Then Begin
    assignfile(f, opendialog1.FileName);
    reset(f);
    GetFTime(f, Time);
    closefile(f);
    UnPackTime(Time, DT);
    showmessage(
      opendialog1.FileName + #13#10 +
      inttostr(dt.Day) + '.' +
      inttostr(dt.Month) + '.' +
      inttostr(dt.Year) + ' ' +
      inttostr(dt.Hour) + ':' +
      inttostr(dt.Min) + '.' +
      inttostr(dt.Sec));
  End;
Vielen Dank allen...
--
Just try it

Antworten