AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DateTime of a Directory

Ein Thema von tcoman · begonnen am 31. Jul 2016 · letzter Beitrag vom 1. Aug 2016
Antwort Antwort
tcoman
(Gast)

n/a Beiträge
 
#1

DateTime of a Directory

  Alt 31. Jul 2016, 13:48
Hallo liebe DP-Gemeinde,

wenn ich das Datum einer Datei brauchte, verwendete ich bis
jetzt immer diese Funktion:
Delphi-Quellcode:
{-0920-} function mz_GetFileDateTime(myFile: string): s_48;
         var dt : integer;
         begin
         dt:=FileAge(myFile);
         try result:=FormatDateTime('dd/mm/yyyy - hh:nn:ss',
                                       FileDateToDateTime(dt));
         except result:='';
         end; {except}
{-0920-} end;
wobei myFile = "x:\dir\filename.ext" war.

Nun habe ich aber ein Verzeichnis und so steht
in myFile = "x:\dir". Die Funktion FileAge() liefert -1 zurueck
und ich bekomme einen Fehler.

Wie kann ich die DateTime eines Verzeichnisses bekommen?

MfG,
Terence
  Mit Zitat antworten Zitat
dGeek
(Gast)

n/a Beiträge
 
#2

AW: DateTime of a Directory

  Alt 31. Jul 2016, 14:03
SwissCelphiCenter sagt so...
http://www.swissdelphicenter.ch/de/showcode.php?id=855
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: DateTime of a Directory

  Alt 31. Jul 2016, 14:08
Delphi-Quellcode:
function mz_GetDirectoryDateTime(myDir : string): s_48; // Das wird wohl ein String sein(?)
var
  sr : TSearchRec;
begin
  if SysUtils.FindFirst(myDir,faDirectory,sr) = 0 Then begin
    Result := DateTimeToStr(FileDateToDateTime(sr.Time));
  end;
  SysUtils.FindClose(sr);
end;
Nur hingedaddelt, nicht getestet.
  Mit Zitat antworten Zitat
tcoman
(Gast)

n/a Beiträge
 
#4

AW: DateTime of a Directory

  Alt 31. Jul 2016, 14:32
Ich habe jetzt eine Loesung die funktioniert:
Delphi-Quellcode:
{-0891-} function mz_GetDirDateTime(myDir: string): s_48;
         var SR : TSearchRec;
         begin
         result:='00.00.0000 - 00:00:00';
         {-none ending backslash in string myDir: "X:\DIR"-}
         if (FindFirst(myDir, faDirectory, SR) = 0) then begin
            try result:=FormatDateTime('dd/mm/yyyy - hh:nn:ss',
                                          FileDateToDateTime(SR.Time));
            except result:='00.00.0000 - 00:00:00';
            end; {except}
            FindClose(SR);
         end;
{-0891-} end;
hatte das Problem schon mal geloest, dachte aber, dass ich
mit dt:=FileAge(myFile); weiterkomme, wenn ich ein "\." an
die Stringvariable myFile anhaenge, was aber nicht funktioniert.

Danke fuer die vielen schnellen Antworten...
@nahpets: Ist genau das, was Du vorgeschlagen hast.
MfG,
Terence

Geändert von tcoman (31. Jul 2016 um 14:42 Uhr) Grund: Danke an nahpets hinzugefuegt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#5

AW: DateTime of a Directory

  Alt 31. Jul 2016, 14:41
wenn ich das Datum einer Datei brauchte, ...
DAS?
Welches?

Erstellungs-Datum (wann die Datei auf dem Datenträger (Partition) erstellt/draufkopiert wurde.
Zeitpunkt des letzten Schreibzugriffs
Zeitpunkt des letzten Lesezugriffs

Und bei Verzeichnissen gibt es diese Daten auch, aber was da drin steht, das hängt vom Dateisystem/DateisystemTreiber/Betriebssystemversion und den Einstellungen ab.
Lesezugriff kann man bei Verzeichnissen vergessen
Schreibzugriff, da wird von von NTFS gern auch der letzte Schreib-/Löschzugriff der enthaltenen Dateien übernommen, also wann sich zuletzt an den Dateien was änderte, aber das hängt davon ab, ob es ein Wechseldatenträger ist, ob der Schreibcache aktiv ist und ob es sich um einen Flash-Speicher (USB-Stick oder SSD) handelt, denn da versucht Windows die Schreibzugriffe zu minimieren und dann ist das Datum/Uhrzeit weniger genau oder wird garnicht aktualisiert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#6

AW: DateTime of a Directory

  Alt 31. Jul 2016, 14:57
GetDirTime

Delphi-Quellcode:
function GetDirTime(const Dir: string): TDateTime;
var
  H: Integer;
  F: TFileTime;
  S: TSystemTime;
begin
  H := CreateFile(PChar(Dir), $0080, 0, nil, OPEN_EXISTING,
    FILE_FLAG_BACKUP_SEMANTICS, 0);
  if H <> -1 then
  begin
    GetFileTime(H, @F, nil, nil);
    FileTimeToLocalFileTime(F, F);
    FileTimeToSystemTime(F, S);
    Result := SystemTimeToDateTime(S);
    CloseHandle(H);
  end
  else
    Result := -1;
end;
//ShowMessage(DateTimeToStr(GetDirTime('c:\Program Files')));
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#7

AW: DateTime of a Directory

  Alt 31. Jul 2016, 15:08
Wozu FILE_FLAG_BACKUP_SEMANTICS und was ist, wenn die Rechte dafür fehlen?

Wer weiß auch aus dem Kopf, dass $0080 eigentlich FILE_READ_ATTRIBUTES darstellen soll?
Oder das erste -1 ein INVALID_HANDLE_VALUE, abgesehn davon, dass typbedingt -1 falsch ist und wenn schon, es ein 4294967295 oder DWORD(-1) sein müsste, da es z.B. in Win64 eventuell Problemchen geben könnte?

Fehlerbehandlung von GetFileTime ... na ja ... wenn das korrekt arbeitet, dann ist im Fehlerfall F nicht initialisiert.

PS: zu meinem letzten Post ... siehe Remarks in MSDN-Library durchsuchenGetFileTime.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (31. Jul 2016 um 15:13 Uhr)
  Mit Zitat antworten Zitat
tcoman
(Gast)

n/a Beiträge
 
#8

AW: DateTime of a Directory

  Alt 1. Aug 2016, 16:41
GetDirTime

Delphi-Quellcode:
function GetDirTime(const Dir: string): TDateTime;
var
  H: Integer;
  F: TFileTime;
  S: TSystemTime;
begin
  H := CreateFile(PChar(Dir), $0080, 0, nil, OPEN_EXISTING,
    FILE_FLAG_BACKUP_SEMANTICS, 0);
  if H <> -1 then
  begin
    GetFileTime(H, @F, nil, nil);
    FileTimeToLocalFileTime(F, F);
    FileTimeToSystemTime(F, S);
    Result := SystemTimeToDateTime(S);
    CloseHandle(H);
  end
  else
    Result := -1;
end;
//ShowMessage(DateTimeToStr(GetDirTime('c:\Program Files')));
Wow! Really amazing code. Lots of thanks,
Terence
  Mit Zitat antworten Zitat
tcoman
(Gast)

n/a Beiträge
 
#9

AW: DateTime of a Directory

  Alt 1. Aug 2016, 16:43
Wozu FILE_FLAG_BACKUP_SEMANTICS und was ist, wenn die Rechte dafür fehlen?

Wer weiß auch aus dem Kopf, dass $0080 eigentlich FILE_READ_ATTRIBUTES darstellen soll?
Oder das erste -1 ein INVALID_HANDLE_VALUE, abgesehn davon, dass typbedingt -1 falsch ist und wenn schon, es ein 4294967295 oder DWORD(-1) sein müsste, da es z.B. in Win64 eventuell Problemchen geben könnte?

Fehlerbehandlung von GetFileTime ... na ja ... wenn das korrekt arbeitet, dann ist im Fehlerfall F nicht initialisiert.

PS: zu meinem letzten Post ... siehe Remarks in MSDN-Library durchsuchenGetFileTime.
That's the difference between computer science and me, a fool.
Du bist echt gut, Himitsu.
MfG,
Terence
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#10

AW: DateTime of a Directory

  Alt 1. Aug 2016, 17:41
Wenn man genug Fehler gemacht hat, dann kennt man die irgendwann auswendig.

Mit den "richtigen" Typen/Konstanten wird der Code leichter lesbar, verständlicher (auch ohne Kommentare an jeder Zeile) und hat auch beim Wechsel des Compilers weniger Problemchen.
Und mit einer entsprechenden Fehlerbehandlung muß man später weniger Angst vor unauffindbaren Fehlern haben, die sich immer liebendgern in Programme einschleichen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Aug 2016 um 17:44 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz