Készítsünk hát három függvényt, melyek mindezt megvalósítják. Az eljárás mindegyik esetben ugyanaz: először a FindFirstFile függvénnyel megkeressük a megadott fájlt, majd annak az utolsó hozzáférési, módosítási vagy létrehozási idejét kiolvassuk. Mivel ez az idő UTC (Universal Coordinated Time) alapú, ezért azt át kell konvertálni a helyi területi beállításoknak megfelelő dátumformátummá. Mindezt a FileTimeToLocalFileTime függvénnyel tehetjük meg. Ezután tovább kell konvertálnunk az időt a DOS-ban használatos időformátummá a FileTimeToDosDateTime függvénnyel. Végül, hogy a Delphi TDateTime osztálya számára is olvasható formátumú legyen a kapott idő, a DOS-alapú időt tovább konvertáljuk a FileDateToDateTime függvénnyel.
Mielőtt hozzálátnánk a forráskód elemzéséhez, nézzük meg, hogy a fent említett függvények hogyan is épülnek fel.
Kezdjük a fájl keresését végző függvénnyel. A FindFirstFile egy könyvtárban megkeres egy adott fájlt a neve alapján.

FindFirstFile
HANDLE FindFirstFile(
LPCTSTR lpFileName,
LPWIN32_FIND_DATA lpFindFileData
);
Paraméterek
LPCTSTR lpFileName
Egy valós könyvtár nevét kell megadnunk, illetve annak a fájlnak a nevét, melyet meg szeretnénk kerestetni. Ez utóbbiban szerepelhetnek úgynevezett joker karakterek, pl. „*”, vagy „?”.
LPWIN32_FIND_DATA lpFindFileData
Egy WIN32_FIND_DATA struktúrára mutató pointer, mely a talált fájl tulajdonságait írja le, így többek között a létrehozásának, az utolsó módosításának, valamint az utolsó használatának időpontját. E három értéket az ftCreationTime, az ftLastWriteTime, illetve az tLastAccessTime paraméterek tartalmazzák.
Visszatérési érték
Sikeres keresés esetén a keresett fájl handle-je.
Megjegyzés
A FindFirstFile a keresett fájl nevével legjobban egyező fájlok listáját adja vissza. Ez nem jelenti azt, hogy a fájlt biztosan megtalálja. Amennyiben az első találat nem felel meg nekünk, akkor a FindNextFile függvénnyel a találati lista következő elemére ugorhatunk.
Most nézzük a FileTimeToLocalFileTime függvényt, amivel helyi időre konvertáljuk az UTC alapú időt.

FileTimeToLocalFileTime
BOOL FileTimeToLocalFileTime(
const FILETIME *lpFileTime,
LPFILETIME lpLocalFileTime
);
Paraméterek
const FILETIME *lpFileTime
Egy FileTime struktúrára mutató pointer, amelyben a konvertálandó UTC alapú időt tároljuk el. A struktúra 2x32 bitből áll, melyben az van eltárolva, hogy 1961. január 1-je óta hány 100 nanoszekundum telt el.
LPFILETIME lpLocalFileTime
Szintén egy FileTime struktúrára mutató pointer, amelyben a konvertálás után a helyi időnek megfelelő érték kerül eltárolásra.
Visszatérési érték
Sikeres konverzió esetén egy nem-null értéket kapunk, ellenkező esetben a visszatérési érték nulla lesz.
Most nézzük meg azt a függvényt, mellyel az így kapott helyi időt MS-DOS alapú idővé alakíthatjuk.

FileTimeToDosDateTime
BOOL FileTimeToDosDateTime(
const FILETIME* lpFileTime,
LPWORD lpFatDate,
LPWORD lpFatTime
);
Paraméterek
const FILETIME* lpFileTime
Egy FileTime struktúrára mutató pointer, melyben a konvertálandó időpontot tároljuk el.
LPWORD lpFatDate
Egy változóra mutató pointer, melyben az MS-DOS alapú időpont dátum része kerül eltárolásra.
LPWORD lpFatTime
Egy változóra mutató pointer, melyben az MS-DOS alapú időpont idő része kerül eltárolásra.
)
Visszatérési érték
Sikeres konverzió esetén egy nem-null értéket kapunk, ellenkező esetben a visszatérési érték nulla lesz.
Ez után nincs már más dolgunk, mint az így kapott MS-DOS időt a Delphi számára is olvasható formátumúvá alakítjuk a FileDateToDateTime függvénnyel.
Nézzük, a forráskódban mindezt hogyan valósítottuk meg. Mivel mindhárom függvény hasonló, így most csak az egyiket tárgyaljuk.
function GetFileCreationTime(sFileName:string):TDateTime;
var
ffd : TWin32FindData;
dft : DWord;
lft : TFileTime;
h : THandle;
begin
Megkeressük az sFileName paraméterben kapott elérési útvonal alapján a megadott fájlt.
h:=Windows.FindFirstFile(PChar(sFileName), ffd);
if (INVALID_HANDLE_VALUE <> h) then
begin
Ha megtaláltuk, a FindClose-al lezárjuk a keresést.
Az ffd változó egy WIN32_FIND_DATA struktúrára mutat, melyben a talált fájl adatai vannak eltárolva. Esetünkben az ftCreationTime paraméterből kiolvassuk a fájl létrehozásának időpontját, majd átalakítjuk helyi idővé.
FileTimeToLocalFileTime(ffd.ftCreationTime,lft);
Az lft paraméterben így kapott időpontot tovább alakítjuk DOS alapú idővé. A kapott értéket a dft változó tárolja.
FileTimeToDosDateTime(lft,LongRec(dft).Hi, LongRec(dft).Lo);
Végül a függvény visszatérési értékének a Delphi által használt dátum- és időformátummá alakítva adjuk át az időpontot.
Result:=FileDateToDateTime(dft);
end;
end;
Végül nincs más dolgunk, mint a kapott eredményt kiíratni egy Memo komponensbe.
Memo1.Lines.Add('A fájl létrehozásának dátuma: ' +
DateTimeToStr(GetFileCreationTime(Edit1.Text)));