C# - Állomány- és könyvtár-információk

forráskód letöltése
Ebben a példában az állományok és a könyvtárak tulajdonságaival foglalkozunk. Megnézzük, hogy miként olvashatunk ki egy hozzárendelt ikont különböző méretekben, miként azonosíthatunk egy könyvtárat relatív elérési út megadásával, miként olvashatjuk ki egy állomány vagy könyvtár attribútumait, miként kérdezhetjük le egy indítható állomány típusát, miként tudhatjuk meg a tulajdonságait egy fájltípusnak, stb.
A shell32.dll (System32) található egy függvény, amely segítségével a bevezetőben felsorolt információkat megszerezhetjük. Ez a függvény az SHGetFileInfo. A függvényt az alábbi deklarációval érhetjük el.
[DllImport("shell32.dll")]
public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
SHGetFileInfo
public static extern IntPtr SHGetFileInfo(
string pszPath,
uint dwFileAttributes,
ref SHFILEINFO psfi,
uint cbSizeFileInfo,
uint uFlags
);
Egy állományról vagy könyvtárról szolgáltat információkat.
Paraméterek
string pszPath
Az állomány vagy könyvtár elérési útja és neve. Az elérési út megadásánál megadhatunk relatív elérési utat is (Pl.: ’..’, ’\’, stb.).
Ha a uFlags paraméter a SHGFI_USEFILEATTRIBUTES flag-et is tartalmazza, akkor a megadott állománynak nem kell fizikailag léteznie. A függvény úgy fog működni, mintha a megadott állomány létezne, a megadott névvel és attribútumokkal. Ezt akkor használhatjuk ki, ha egy állománytípusról szeretnénk információkat lekérdezni.
uint dwFileAttributes
Ennek a paraméternek csak akkor van jelentősége, ha a uFlags paraméter a SHGFI_USEFILEATTRIBUTES flag-et is tartalmazza. Ilyenkor ez a paraméter az állomány-attribútumok megadására szolgál. Az attribútum megadásánál a Windows unit FILE_ATTRIBUTE_* konstansait használhatjuk.
Egyéb esetekben, ebben a paraméterben 0-t kell megadnunk.
ref SHFILEINFO psfi
Ebben a paraméterben egy SHFILEINFO típusú struktúrát kell megadnunk. A lekérdezés eredménye ennek a változónak a megfelelő tagjába kerül, attól függően, hogy az uFlags paraméterben milyen információt kértünk.
uint cbSizeFileInfo
A psfi paraméterben megadott SHFILEINFO típusú struktúra mérete bájtokban.
uint uFlags
Ennek a paraméternek az értéke határozza meg, hogy milyen információkat akarunk lekérdezni.
Értéke az alábbi konstansok kombinációja lehet:
Konstans Jelentése
SHGFI_ATTRIBUTES Attribútum-információk kérése. A lekérdezés eredményét az SHFILEINFO struktúra dwAttributes tagjából olvashatjuk ki.
SHGFI_DISPLAYNAME Az állomány vagy könyvtár neve, ahogyan azt a rendszer megjeleníti. Ha az rendelkezik hosszú névvel, akkor azt kapjuk eredményül. A lekérdezés eredményét a SHFILEINFO struktúra szDisplayName tagjából olvashatjuk ki.
SHGFI_EXETYPE Ezt a flag-et csak önmagában használhatjuk. Segítségével egy futtatható állomány típusát határozhatjuk meg. A lekérdezés eredményét a függvény visszatérési értékeként kapjuk meg.
SHGFI_ICON A hozzárendelt ikon lekérdezésére szolgál. Az ikont a SHFILEINFO struktúra hIcon tagjában kapjuk meg. Az ikon indexét a rendszer ImageList-jében az iIcon tag adja meg.
SHGFI_ICONLOCATION A hozzárendelt ikont tartalmazó állomány nevét, valamint azon belül az ikon indexét adja meg. Az állomány neve a SHFILEINFO struktúra szDisplayName tagjába kerül, az ikon indexe pedig az iIcon tagba.
SHGFI_LARGEICON Az SHGFI_ICON-nal együtt használható, az állomány nagy ikonjának lekérdezésére szolgál.
SHGFI_SELECTED Csak az SHGFI_ICON flag-gel együtt használható. A lekérdezett ikont kijelölt állapotában jeleníti meg.
SHGFI_SHELLICONSIZE Csak az SHGFI_ICON flag-gel együtt használható. Az ikont a rendszerben beállított méretben jeleníti meg.
SHGFI_SMALLICON Az SHGFI_ICON-nal vagy az SHGFI_SYSICONINDEX-szel együtt használható, az állomány kis ikonjának lekérdezésére szolgál.
SHGFI_SYSICONINDEX A hozzárendelt ikon indexét adja vissza a rendszer ImageList-jéből. A lekérdezés eredményét a SHFILEINFO struktúra iIcon tagjából olvashatjuk ki.
SHGFI_TYPENAME A hozzárendelt, szöveges típusleírást adja vissza. A lekérdezés eredményét a SHFILEINFO struktúra szTypeName tagjából olvashatjuk ki.
SHGFI_USEFILEATTRIBUTES Használatával egy állománytípusról kérdezhetünk le információkat. Olyan állományról kapunk információt, amely fizikailag nem feltétlenül létezik, és a dwFileAttributes paraméterben megadott attribútumokkal rendelkezik. Nem használható együtt az SHGFI_ATTRIBUTES, SHGFI_EXETYPE, valamint az SHGFI_PIDL flag-ekkel.
Visszatérési érték
A függvény visszatérési értéke a uFlags paramétertől függ.
Ha a uFlags paraméter nem tartalmazza sem az SHGFI_EXETYPE, sem az SHGFI_SYSICONINDEX értéket, akkor a függvény sikeres lefutása esetén az eredmény nem 0.
Ha a uFlags-ben szerepel az SHGFI_EXETYPE, akkor a függvény visszatérési értéke a futtatható állomány típusát azonosító szám.
Az SHFILEINFO struktúrát és a konstansokat is implementálnunk kell. A struktúra implementációja megtalálható a mellékelt forráskódban.
Az SHFILEINFO struktúra tagjai
  • hIcon – Az állományhoz rendelt ikon azonosítója.
  • iIcon – Az ikon indexe a rendszer ImageList-jében.
  • dwAttributes – Fájl attribútumok.
  • szDisplayName – Az állomány, könyvtár neve, ahogyan azt a Windows Shell megjeleníti.
  • szTypeName – Az állományhoz tartozó szöveges leírás.