HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Konzol alkalmazás kimenetének átírányítása


Példaprogram letöltése

7971 bájt

A konzol kimenetének átirányítása nem új keletű lehetőség, tetszőleges állományba irányíthatjuk át az eredményt. A .NET-ben készített alkalmazásainkban képesek vagyunk arra is, hogy a standard kimenetet a saját alkalmazásunk egy tetszőleges kontroljába irányítsuk, vagyis megjelenítsük az adott parancs eredményét. Igen hasznos lehet ez abban az esetben, ha nem szeretnénk a Windows-os alkalmazásunkban egy felbukkanó parancssort megjeleníteni. Így akár egy szöveges állományba is elmenthetjük az eredményhalmazt.

A megoldás abban rejlik, hogy amikor programból futtatunk egy másikat, akkor lehetőségünk van megadni, hogy mi legyen a standard output. Amikor egy konzol alkalmazás fut és erről nem rendelkezünk külön, akkor alapértelmezésben minden szöveges információ a konzol ablakban jelenik meg. Ha ezt átirányítjuk máshova, akkor lehetőségünk van hozzáférni ezekhez az adatokhoz és így ott jeleníthetjük meg azokat, ahol csak akarjuk, akár egy RichTextBox kontrolban is.
A megvalósítást igen hatékonyan és kultúráltan támogatja a System.Diagnostics névtér Process osztálya. A művelet első lépése, hogy létrehozunk az osztályból egy példányt, majd a ProcessStartInfo osztályból is egyet.
Process p = new Process();
ProcessStartInfo psi = new ProcessStartInfo("cmd");
Ez utóbbi konstruktorának paraméterében adjuk meg, hogy melyik alkalmazást indítjuk el, jelen esetben ez a cmd.exe parancssor.
Annak érdekében, hogy a parancssor kimenetét átirányíthassuk, a ProcessStartInfo objektum néhány property-jét be kell állítanunk a megfelelő értékre. Mivel a ki- és bemenetet egyaránt átirányítjuk a művelet sikere érdekében, a RedirectStartadardOutput és a RedirectStandardInput property értékét is igazra kell állítani.
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
Mivel nem szeretnénk, ha a legtöbb esetben fekete parancssori ablak megjelenjen az alkalmazásban, nem engedélyezzük az ablaklétrehozást.
psi.CreateNoWindow = true;
Az átirányítás akkor lehet sikeres, ha a UseShellExecute property értékét FALSE-ra állítjuk.
psi.UseShellExecute = false;
Végül a Process objektum StartInfo property-jének adjuk át a beállított tulajdonságú ProcessStartInfo objektumot, és elindítjuk a műveletet a Start metódussal.
p.StartInfo = psi;
p.Start();
A Standard bemenet írására egy StreamWriter, míg a Standard kimenet olvasására egy StreamReader objektumot hoztunk létre.
StreamWriter sin = p.StandardInput;
StreamReader sout = new StreamReader(p.StandardOutput.BaseStream,System.Text.Encoding.UTF8);
A következő lépésben a bemenetre írjuk a parancssorban végrehajtandó utasítás karakterláncát, vagy is a C:\ meghajtó gyökerében található elemek kilistázását végző “DIR C:\ /o” parancsot.
sin.AutoFlush = true;
sin.WriteLine("dir C:\\ /o");
sin.Close();
A Standard kimeneten keletkező eredményhalmaz bájtjait pedig a Form RichTextBox kontroljában jelenítjük meg. Ehhez a kontrol Text property-jének kell értékül adni a StreamReader objektum olvasási műveletének eredményét.
richTextBox1.Text = sout.ReadToEnd();
Ezt követően tetszőleges műveletet elvégezhetünk az adott adathalmazon.

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 740. 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 |