HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Állomány, mappa egyedi 64 bites azonosítószámának lekérdezése


Példaprogram letöltése

4606 bájt

Minden állománynak és mappának van egy egyedi 64 bites azonosítószáma. Így akár egy mappán belül is lehet két azonos nevű állomány. Jó példa erre a lomtár, ahol békésen megférnek egymás mellett azonos nevű, törölt állományok. Mivel ez a szám csak az adott meghajtón belül egyedi, így a teljes rendszeren belüli egyediséget csak úgy tudjuk leképezni, hogy ha az állomány azonosítója mellé az adott meghajtó azonosítóját is hozzátesszük.
Mellékelt példában készítünk egy komponenst, mely egy mappáról, vagy állományról e két azonosító számot lekérdezi.

A mellékelt példaprogram megnyitása előtt a FileID.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens használatához a FileName property-ben kell megadni azt az állományt elérési úttal, melynek azonosítójára kíváncsiak vagyunk. Az azonosítót az ID property-ből olvashatjuk ki, illetve ugyanezt a számot hexadecimális formában az IDHex property-ből tudhatjuk meg.
Annak a meghajtónak az azonosítóját, ahol az állomány található a Volume property-ből olvashatjuk ki, míg ugyanezt a számot hexadecimálisként a VolumeHex property-ből.
Az azonosítószámokat tehát akkor kell a komponensünknek meghatároznia, amikor a FileName property változik. Ekkor fut a SetFileName eljárás.
procedure TFileID.SetFileName(const Value: string);
begin
  ...
  try
Az adatok lekérdezéséhez megnyitjuk az állományt a CreateFile függvény hívásával.
    h:=CreateFile(PChar(FFileName), 0, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);
    if h<>INVALID_HANDLE_VALUE then begin
Ha a megnyitás sikeres volt, akkor a GetFileInformationByHandle függvénnyel lekérdezhetjük a szükséges információkat egy BY_HANDLE_FILE_INFORMATION struktúrába. Ennek nFileIndexHigh mezője tartalmazza az állomány egyedi azonosítójának felső 32 bitjét, míg az nFileIndexLow mezőben az alsó 32 bit található.
      if GetFileInformationByHandle(h, hfi) then begin
        FID:=hfi.nFileIndexHigh shl 32 + hfi.nFileIndexLow;
A meghajtó egyedi 32 bites azonosítóját a dwVolumeSerialNumber mező tartalmazza.
        FVolume:=hfi.dwVolumeSerialNumber;
Végül a két számot hexadecimálissá alakítjuk, majd zárjuk az állományt.
        FIDHex:=IntToHex(FID, 16);
        FVolumeHex:=IntToHex(FVolume, 8);
      end;
    end;
    CloseHandle(h);
  except
  end;
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
1488DelphiMS SQL tárolt eljárások1. rész
1499DelphiMS SQL tárolt eljárások2. rész
1507DelphiMS SQL tárolt eljárások3. rész
1519DelphiMS SQL tárolt eljárások4. rész
1526DelphiMS SQL tárolt eljárások5. rész
1537DelphiMS SQL tárolt eljárások6. rész
1546DelphiMS SQL tárolt eljárások7. rész
1553DelphiMS SQL tárolt eljárások8. rész
1564DelphiMS SQL tárolt eljárások9. rész
1573DelphiMS SQL tárolt eljárások10. rész
1582DelphiMS SQL tárolt eljárások11. rész
1591DelphiMS SQL tárolt eljárások12. rész
1600DelphiMS SQL tárolt eljárások13. rész
1609DelphiMS SQL tárolt eljárások14. rész
1617DelphiMS SQL tárolt eljárások15. rész
1626DelphiMS SQL tárolt eljárások16. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 475. 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 |