Ordner Erstellungs-Datum
-
Guten Morgen.
Ich habe eine Stringlist mit mehreren Verzeichnissenx:\\hsdc\\log
x:\\hsdc\\night
x:\\hsdc_kw\\user
x:\\hsdc\\lab\\
x:\\hsdc\\lab\\biologyich brauche jeweils das erstellungs-Datum des Ordners.
FindFirst kann ich nicht verwenden, da die Verzeichnisse vorgegeben sind
Mit Dateien mache ich das so:
//--------------------------------------------------------------------------- HANDLE hFile; const char* MyFile = DateiPfad.c_str(); hFile = CreateFile(MyFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); GetFileInformationByHandle(hFile, &lpFileInfo); CloseHandle(hFile); //--------------------------------------------------------------------------- SYSTEMTIME sysTime; FILETIME filetime; FileTimeToLocalFileTime(&lpFileInfo.ftCreationTime, &filetime); FileTimeToSystemTime(&filetime, &sysTime); SystemTimeToDateTime(sysTime); AnsiString DateiZeit = FormatFloat("00",sysTime.wDay); AppendStr(DateiZeit,"."); AppendStr(DateiZeit,FormatFloat("00",sysTime.wMonth)); AppendStr(DateiZeit,"."); AppendStr(DateiZeit,FormatFloat("####",sysTime.wYear)); AppendStr(DateiZeit," "); AppendStr(DateiZeit,FormatFloat("00",sysTime.wHour)); AppendStr(DateiZeit,":"); AppendStr(DateiZeit,FormatFloat("00",sysTime.wMinute)); AppendStr(DateiZeit,":"); AppendStr(DateiZeit,FormatFloat("00",sysTime.wSecond)); AppendStr(DateiZeit,":"); AppendStr(DateiZeit,FormatFloat("000",sysTime.wMilliseconds)); //---------------------------------------------------------------------------Bei Ordnern bekomme ich jeweils 01.01.1601 01:07:09:497 als Rückgabewert.
aber wie bekomme ich jetzt das Handle auf die Ordner, um sie anzusprechen ?
//--------------------------------------------------------------------------- hFile = CreateFile(MyFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); //---------------------------------------------------------------------------scheint mir dabei nicht der richtige Weg zu sein.
Hoffe jemand hat ne Idee und versteht wo das Problem ist
==>Eisbeer<==
-
schau mal hier wird zwar nach allen Files gesucht, aber wenn du bei den Attributes nur Ordner suchen läßt sollte das funktionieren
bei "Filename" kannst du natürlich auch die Einträge deiner StringList verwenden
-
Gibt´s ne´ Alternative ohne FindFirst etc.?
==>Eisbeer<==
-
Ja, schau Dir mal den ersten Post an. FileAge(). Sollte Dir das Erstellungsdatum liefern, nostre brauchte aber das letzte Änderungsdatum.
Und wieso kannst Du FindFirst nicht verwenden, wenn die Verzeichnisse vorgeben sind? Wenn Du nach einem exakten Datei- oder Verzeichnisnamen suchst, erhälst Du auch nur exakt ein Ergenis mit FindFirst.
Grüße Joe_M.
-
Danke für die Tipps. Habe den vorgeschlagenen Code leicht angepasst. Funktioniert gut.
Ich hatte nur Bedenken bezüglich der Verarbeitungszeit durch FindFirst
TSearchRec sr; int iAttributes = faAnyFile; SYSTEMTIME sysTime; FILETIME filetime; TDateTime dtFileCreated; // enthält Erstellungsdatum //TDateTime dtFileLastModified; // enthält Datum der letzten Änderung if (FindFirst(OrdnerPfad, iAttributes, sr) == 0) { FileTimeToLocalFileTime(&(sr.FindData.ftCreationTime), &filetime); FileTimeToSystemTime(&filetime, &sysTime); SystemTimeToDateTime(sysTime); dtFileCreated = TDateTime(sysTime.wHour, sysTime.wMinute, sysTime.wSecond, sysTime.wMilliseconds) + TDateTime(sysTime.wYear, sysTime.wMonth, sysTime.wDay); //FileTimeToSystemTime(&(sr.FindData.ftLastWriteTime), &sysTime); //dtFileLastModified = TDateTime(sysTime.wHour, sysTime.wMinute, sysTime.wSecond, sysTime.wMilliseconds) //+ TDateTime(sysTime.wYear, sysTime.wMonth, sysTime.wDay); } FindClose(sr); OrdnerZeit = dtFileCreated;==>Eisbeer<==