C# - Speciális állományinformációk lekérdezése

forráskód letöltése
Cikkünkben állományokról kérdezünk le információkat két területen. Az első példában bemutatjuk, hogyan kaphatunk információkat egy tetszőleges MP3-as állományról a Windows Shell objektumainak segítségével. A másik példában feltárjuk, hogyan határozható meg egy Internet Explorer kontrol esetében, hogy milyen típusú állomány töltődött be éppen a kontrolba a Navigate metódussal.
MP3-as állomány információi
Az MP3-as állományok magukban hordozzák a zenei anyag jellemzőit, csupán annyit kell tennünk, hogy a megfelelő metódussal lekérdezzük ezeket az adatokat. Ehhez a mellékelt példában a Shell32 COM komponenst használjuk fel. Ehhez a komponenst referenciaként a projektünkhöz kell adnunk, és a Shell32 kulcsszóval hivatkozhatunk a névtérre.
A TabControl kontrol adott füle alatt meg kell adnunk egy MP3-as állomány elérési útvonalát, és máris lekérdezhetjük az adatokat, melyek egy-egy szövegmezőben jelennek meg.
Első lépésben meghatározzuk az MP3-as állomány mappáját.
FileInfo fi = new FileInfo(textBox1.Text);  
DirectoryInfo di = fi.Directory;
Ezt követően példányosítjuk a ShellClass osztályt.
ShellClass shell  = new ShellClass();
A Shell objektum NameSpace metódusának paraméterként átadjuk a mappa elérési útvonalát, így kaphatunk egy Folder objektumot.
Folder folder = shell.NameSpace(di.FullName);
A Folder objektum ParseName metódusának elegendő paraméterként megadni a fájl nevét, és megkaphatunk egy FolderItem objektumot, mely már a megoldást szolgáltatja.
FolderItem folderItem = folder.ParseName(fi.Name);
Ha a megadott név létezik, vagyis a FolderItem objektum értéke nem NULL, akkor a szövegmezőkben megjelenítjük az adott információkat. Ezt a Folder objektum GetDetailsOf metódusa adja meg.
A metódusnak két paramétere van: az első a kapott FolderItem objektum, míg a másik egy konstans, mellyel jelezhetjük, hogy milyen jellegű információra van szükségünk.
if (folderItem != null)
{
  textBox2.Text = folder.GetDetailsOf(folderItem,9);
  textBox3.Text = folder.GetDetailsOf(folderItem,17);
  textBox4.Text = folder.GetDetailsOf(folderItem,10);
  richTextBox1.Text = folder.GetDetailsOf(folderItem,-1);                    
}
A konstansok jelentése a következő:
  • 9: Előadó neve
  • 17: Dalcím
  • 10: Albumcím
  • -1: Egyéb jellemző információk szöveges formátumban
Amennyiben a fenti módszerrel nem kapunk eredményt, akkor az arra utal, hogy az adott MP3-as állomány nem tartalmaz értelmezhető adatokat.
Böngészőbe töltött állomány típusa
A mellékelt példában betöltjük a sample.doc állományt az alkalmazás indulásakor. Erre a Navigate2 metódust használjuk fel, mely a böngészőkontrol tagja.
object s = Application.StartupPath + "\\sample.doc";
axWebBrowser1.Navigate2(ref s, ref m, ref m, ref m, ref m);
Annak érdekében, hogy eldönthessük, milyen állományt – jellemzően Microsoft Office alkalmazás által generált állományt – nyitottunk meg, le kell kérdeznünk azt a böngészőkontroltól. Erre a kontrol NavigateComplete2 eseményének kezelőjében van lehetőségünk, mikor az állomány betöltődése befejeződik.
A kezelőmetódus második paramétere segítségével létrehozunk egy object objektumot, melynek segítségével megkaphatjuk a betöltött dokumentumot.
Object o = e.pDisp;
object oDocument = null;
oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
Ez egy Word dokumentum esetén a Document osztály egy példánya lesz. Ez rendelkezik egy Application property-vel, mely a dokumentumot birtokló Word alkalmazást reprezentálja.
Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
Ennek pedig lekérdezzük a Name property-jét, és az eredményt megjelenítjük a böngészőkontrol alatti címkén.
Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);     
label4.Text = "Alkalmazás: " + oName.ToString();