Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Text aus DosBox kopieren
Andi123
myCSharp.de - Member



Dabei seit:
Beiträge: 26

Themenstarter:

Text aus DosBox kopieren

beantworten | zitieren | melden

Hallo,

ich habe ein kleines Problem bei dem ich nicht weiter komme.
Habe ein kleines Programm geschrieben das Ausgaben in der Dos-Box macht, damit ich weiß wie das Programm abgelaufen ist.

Nun würde ich gerne alle Ausgaben, die das Programm in die Dos-Box schreibt in ein Log File schreiben lassen.

Kann man den Text in der Dos-Box irgendwie komplett kopieren und in einen String speichern ?

Hat jemand einen Tipp, wie ich das realiesieren kann?

Danke und Gruß

Andi
private Nachricht | Beiträge des Benutzers
sbertl000
myCSharp.de - Member

Avatar #avatar-2350.png


Dabei seit:
Beiträge: 822
Herkunft: Wien

beantworten | zitieren | melden

FileStream + StreamWriter Klassen, und einfach alles, was eingegeben wird in einen string speichern

sbertl
private Nachricht | Beiträge des Benutzers
marsgk
myCSharp.de - Member



Dabei seit:
Beiträge: 1.439
Herkunft: Linz, Austria

beantworten | zitieren | melden

Sonst kannst du dein Programm auch so aufrufen:
cmd:> myProgr param > errorlog.txt
private Nachricht | Beiträge des Benutzers
Andi123
myCSharp.de - Member



Dabei seit:
Beiträge: 26

Themenstarter:

beantworten | zitieren | melden

OK.
Werde mich jetzt erstmal mit der StreamWriter Klasse nochmal beschäftigen.

Danke
private Nachricht | Beiträge des Benutzers
Andi123
myCSharp.de - Member



Dabei seit:
Beiträge: 26

Themenstarter:

beantworten | zitieren | melden

Hi,
habe mein Problem leider noch nicht gelöst.
Wie kann ich den Text, der in der DOS-BOX steht in einen String speichern?
Ich starte in meinem Programm den Windows Media Encoder, der nach dem Encoden ein Protokoll in die DOS-Box schreibt. Dieses würde ich gerne in eine LOG-File speichern.
Habe mich auf den Seiten von Microsoft schon erkundigt, aber nichts dazu gefunden.



Process myProcess = new Process(); 

            ProcessStartInfo startInfo1 = new ProcessStartInfo("D:/EncodingServer/start1.bat");
            startInfo1.WindowStyle = ProcessWindowStyle.Normal;
            startInfo1.UseShellExecute = false; 
            startInfo1.RedirectStandardOutput = true; 
            startInfo1.CreateNoWindow = true;
            Process.Start(startInfo1).WaitForExit();                             

            StreamReader myStreamReader = myProcess.StandardOutput;
            string myString = myStreamReader.ReadToEnd();
            myProcess.Close();
            


Bei der folgenden Code-Zeile hängt er sich immer auf, da er irgendwie mit dem
(.StandardOutput) nicht klarkommt:

StreamReader myStreamReader = myProcess.StandardOutput;

Hat jemand einen Tipp für mich ?

Danke & Gruß
private Nachricht | Beiträge des Benutzers
sbertl000
myCSharp.de - Member

Avatar #avatar-2350.png


Dabei seit:
Beiträge: 822
Herkunft: Wien

beantworten | zitieren | melden

Zitat
Bei der folgenden Code-Zeile hängt er sich immer auf, da er irgendwie mit dem

Welcher Fehler kommt denn?


sbertl
private Nachricht | Beiträge des Benutzers
Andi123
myCSharp.de - Member



Dabei seit:
Beiträge: 26

Themenstarter:

beantworten | zitieren | melden

Hi,

man muss dieses StandardOutput nochmal extra anlegen:

public StreamReader StandardOutput { get; }


Habe aber noch nicht herausgefunden, wo ich dies hinschreiben muss und was noch alles dazu gehört.

Kannst du mir einen Tipp geben?

Gruß & Danke

Andi
private Nachricht | Beiträge des Benutzers
christof.k
myCSharp.de - Member



Dabei seit:
Beiträge: 159

beantworten | zitieren | melden

Dafür gibt es schon fertige Tools wie z.B. MTEE (abgeleitet aus dem Unix Tee). Dieses kleine Programm gibt die Ausgabe "Deines" Dritt-Programmes in die Dos-Box + in ein von Dir gewähltes File aus.

Christof
private Nachricht | Beiträge des Benutzers
sbertl000
myCSharp.de - Member

Avatar #avatar-2350.png


Dabei seit:
Beiträge: 822
Herkunft: Wien

beantworten | zitieren | melden

public StreamReader StandardOutput { get; }

Das gehört genau dort hin, wo du auch eine Methode definieren würdest.
Aber in den get Block muss noch was rein, was, weiß ich aber nicht.

sbertl
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo zusammen,

StandardOutput ist eine Property von Process und muss nicht extra definiert werden.

herbivore
private Nachricht | Beiträge des Benutzers
Andi123
myCSharp.de - Member



Dabei seit:
Beiträge: 26

Themenstarter:

beantworten | zitieren | melden

Hallo,

ich habe mich nochmals mit der StreamReader Klasse beschäftigt und habe immer noch das Problem mit diesem "StandardOutput".

Ich starte den Windows Media Encoder per .bat-Datei und nachdem der Encodierprozess abgeschlossen ist, kommt die Fehlermeldung:
StandardOut wurde nicht umgeleitet, oder der Prozess wurde noch nicht gestartet.



Hier mein Quellcode:

 
public static void MediaEncoder()
        {

            Process myProcess = new Process();

            ProcessStartInfo startInfo1 = new ProcessStartInfo("D:/EncodingServer/start1.bat");

            startInfo1.WindowStyle = ProcessWindowStyle.Normal;
            startInfo1.UseShellExecute = false; 
            startInfo1.RedirectStandardOutput = true; 
            startInfo1.CreateNoWindow = true;
            Process.Start(startInfo1).WaitForExit();

            StreamReader myStreamReader = myProcess.StandardOutput;
            string myString = myStreamReader.ReadToEnd();
            myProcess.Close();          



Hat jemand eine Idee, was ich hier falsch mache?
Habe ich etwas übersehen?

Danke und Gruß

Andi
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Andi123,

ist der MediaEncoder nicht ein Programm mit GUI? Wenn ja, gibt der doch vermutlich nichts auf StandardOutput aus.

herbivore
private Nachricht | Beiträge des Benutzers
Thunderhawk
myCSharp.de - Member



Dabei seit:
Beiträge: 13
Herkunft: Gießen / Hessen

beantworten | zitieren | melden

Zitat
Original von Andi123
Fehlermeldung:
StandardOut wurde nicht umgeleitet, oder der Prozess wurde noch nicht gestartet.

Das ist auch völlig richtig, der Prozess myProcess wurde noch nicht gestartet!
Du mischst hier zwei Möglichkeiten zur Prozesserstellung:
1. Prozess-Instanz erstellen, deren Startinfo einstellen und ausführen
2. Statisches Process.Start, das eine Prozess-Instanz zurückgibt


In deinem Fall die schnellste Lösung:
Einfach ein "my" vor Process.Start
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4.506
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

Hallo zusammen,
Zitat
Habe ein kleines Programm geschrieben das Ausgaben in der Dos-Box macht, damit ich weiß wie das Programm abgelaufen ist.

Vielleicht bin ich viel zu pragmatisch, aber ist es nicht wesentlich einfacher alle Ausgaben, die an die Console geschickt werden auch gleichzeitig in ein LogFile zu schicken, anstatt die Einträge zuerst an die Console zu schicken, dann aus der Console auszulesen, um sie dann in ein LogFile zu schreiben??

Also etwa so:



void MeineSchreibTextNachricht(string textZumSchreiben)
{
   Console.WriteLine(textZumSchreiben);
   meinLogFile.Append(textZumSchreiben);
}



Gruß
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
private Nachricht | Beiträge des Benutzers