HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Egy fájl utolsó használatának, módosításának, illetve létrehozásának az időpontját lekérdező program


Példaprogram letöltése

3777 bájt

A mai cikkben bemutatásra kerülő módszer segítségével egy adott állományról megtudhatjuk, hogy azt mikor hozták létre, mikor volt utoljára használatban, illetve mikor történt rajta utoljára módosítás. Mindehhez létrehozunk egy-egy függvényt, amelyek ezeket az információkat egy struktúrából kiolvassák.

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.
    Windows.FindClose(h);
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)));

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 520. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |