"StandardIn n'a pas été redirigé" erreur in.NET (C#)
je veux faire une application simple en utilisant stdin. Je veux créer une liste dans un programme et de l'imprimer dans un autre. Je suis venu avec la ci-dessous.
Je n'ai aucune idée si app2 fonctionne cependant dans app1 j'obtiens l'exception "StandardIn N'a pas été redirigé."sur writeline (à l'intérieur de l'instruction foreach). Comment puis-je faire ce que j'ai l'intention de faire?
NOTE: j'ai essayé de définir UseShellExecute à la fois vrai et faux. Les deux sont à l'origine de cette exception.
//app1
{
var p = new Process();
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.FileName = @"pathbinDebugprint_out_test.exe";
foreach(var v in lsStatic){
p.StandardInput.WriteLine(v);
}
p.StandardInput.Close();
}
//app 2
static void Main(string[] args)
{
var r = new StreamReader(Console.OpenStandardInput());
var sz = r.ReadToEnd();
Console.WriteLine(sz);
}
4 réponses
vous devez vous assurer que ShellExecute est défini à false pour que la redirection fonctionne correctement.
vous devriez également ouvrir un streamwriter dessus, démarrer le processus, attendre que le processus se termine, et fermer le processus.
Essayez de remplacer ces lignes:
foreach(var v in lsStatic){
p.StandardInput.WriteLine(v);
}
p.StandardInput.Close();
avec:
p.Start();
using (StreamWriter sr= p.StandardInput)
{
foreach(var v in lsStatic){
sr.WriteLine(v);
}
sr.Close();
}
// Wait for the write to be completed
p.WaitForExit();
p.Close();
si vous souhaitez voir un exemple simple de comment écrire votre processus à un Flux d'utiliser ce code ci-dessous comme Modèle se sentir libre de le modifier pour l'adapter à vos besoins..
class MyTestProcess
{
static void Main()
{
Process p = new Process();
p.StartInfo.UseShellExecute = false ;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = @"path\bin\Debug\print_out_test.exe";
p.StartInfo.CreateNoWindow = true;
p.Start();
System.IO.StreamWriter wr = p.StandardInput;
System.IO.StreamReader rr = p.StandardOutput;
wr.Write("BlaBlaBla" + "\n");
Console.WriteLine(rr.ReadToEnd());
wr.Flush();
}
}
//Modification pour ajouter votre travail avec votre boucle for
à Partir de http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardinput.aspx
vous devez définir UseShellExecute à false si vous voulez définir RedirectStandardInput à true. Dans le cas contraire, l'écriture sur le flux StandardInput fait exception.
On pourrait s'attendre à false par défaut, qui ne semble pas être le cas.