C# Console de recevoir une entrée avec tuyau
Je sais comment le programme d'application de la Console avec des paramètres, par exemple : myProgram.exe param1 param2.
Ma question est, comment puis-je faire mon programme fonctionne avec |, par exemple : echo "mot" | myProgram.exe?
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser
Console.Read()
etConsole.ReadLine()
comme si vous étiez en train de lire la saisie de l'utilisateur. Les tuyaux de remplacer la saisie de l'utilisateur de manière transparente. Vous ne pouvez pas utiliser à la fois facilement (même si je suis sûr que c'est tout à fait possible...).Edit:
Un simple
cat
style de programme:Et lorsqu'il est exécuté, comme prévu, la sortie:
Console.ReadLine
états qu'elle retourne null si il n'y a plus de lignes à lire: msdn.microsoft.com/de-de/library/...Suivantes ne suspend pas l'application de saisie et de travaux lorsque des données sont ou n'est pas courante. Un peu un hack; et en raison de l'erreur de la capture, de la performance pourrait être en manque de lors de de nombreuses canalisations d'appels sont pris, mais... facile.
System.Console.WriteLine(System.Console.IsInputRedirected.ToString());
dans .NET 4.5, c'est
C'est la façon de le faire:
Ce qui permet à deux méthodes d'utilisation. Lire à partir de entrée standard:
ou à la lecture de les canalisations d'entrée:
Voici une autre solution alternative qui a été mis de l'autre des solutions plus un peek().
Sans Peek() j'ai l'expérience que l'application ne serait pas de retour sans ctrl-c, à la fin quand on fait "type t.txt | prog.exe" où t.txt c'est un multi-ligne fichier. Mais juste "prog.exe" ou "echo hi | prog.exe" a bien fonctionné.
ce code est destiné à ne traiter que les canalisations d'entrée.
System.Console.WriteLine(System.Console.IsInputRedirected.ToString());
De la Console.Dans est une référence à un TextReader enroulé autour du flux d'entrée standard. Lorsque la tuyauterie de grandes quantités de données à votre programme, il pourrait être plus facile à travailler de cette façon.
il y a un problème avec l'exemple proposé.
sera bloqué en attente pour l'entrée si le programme a été lancé sans les canalisations de données. de sorte que l'utilisateur doit manuellement appuyez sur n'importe quelle touche pour quitter le programme.
Cela fonctionnera aussi pour les
J'ai dû utiliser un StringBuilder pour manipuler les entrées saisies à partir de Stdin: