48 Stimmen

C# Konsole empfangen Eingabe mit Pipe

Ich weiß, wie man eine Konsolenanwendung mit Parametern programmiert, Beispiel: meinProgramm.exe param1 param2.

Meine Frage ist, wie kann ich mein Programm funktioniert mit |, Beispiel: echo "Wort" | myProgram.exe?

3voto

Si Zi Punkte 971

Dies gilt auch für

c: \MyApp.exe < input.txt

Ich musste einen StringBuilder verwenden, um die von Stdin erfassten Eingaben zu manipulieren:

public static void Main()
{
    List<string> salesLines = new List<string>();
    Console.InputEncoding = Encoding.UTF8;
    using (StreamReader reader = new StreamReader(Console.OpenStandardInput(), Console.InputEncoding))
    {
        string stdin;
        do
        {
            StringBuilder stdinBuilder = new StringBuilder();
            stdin = reader.ReadLine();
            stdinBuilder.Append(stdin);
            var lineIn = stdin;
            if (stdinBuilder.ToString().Trim() != "")
            {
                salesLines.Add(stdinBuilder.ToString().Trim());
            }

        } while (stdin != null);

    }
}

2voto

Joel Mueller Punkte 27700

Console.In ist ein Verweis auf einen TextReader, der um den Standardeingabestrom gewickelt ist. Wenn Sie große Datenmengen in Ihr Programm einspeisen, ist es möglicherweise einfacher, auf diese Weise zu arbeiten.

1voto

Alex N Punkte 46

Es gibt ein Problem mit dem gelieferten Beispiel.

  while ((s = Console.ReadLine()) != null)

wartet nicht mehr auf Eingaben, wenn das Programm ohne gepipte Daten gestartet wurde, so dass der Benutzer manuell eine Taste drücken muss, um das Programm zu beenden.

1 Stimmen

Das ist eher eine Bemerkung wert, und andere haben sich damit befasst und eine Lösung dafür gefunden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X