HeadJ.E.M.
HeadJ.E.M.

Reputation: 101

How to pipe output from C# application using cmd to text?

I'm running an app that uses a console app in the background

When I do this in cmd read-info.exe Myfile.file >fileinfo.txt it will create the file fileinfo.txt in the route folder.

But when I do it in code nothing happens, why?

private void button1_Click(object sender, EventArgs e)
{
    FolderBrowserDialog theDialog = new FolderBrowserDialog();
    theDialog.RootFolder = System.Environment.SpecialFolder.MyComputer;
    if (theDialog.ShowDialog() == DialogResult.OK)
    {
        textBox1.Text = theDialog.SelectedPath.ToString();

        string command = "read-info.exe " + textBox1.Text +"> File.txt";
        string retur = CMD(command);
    }
}

static string CMD(string args)
{
    string cmdbat = "cd " + Application.StartupPath.Replace("\\", "/") + "\r\n";
    cmdbat += args + " >> out.txt\r\n";
    cmdbat += "exit\r\n";
    File.WriteAllText("cmd.bat", cmdbat);

    System.Diagnostics.Process process = new System.Diagnostics.Process();

    System.Diagnostics.ProcessStartInfo startInfo = new     System.Diagnostics.ProcessStartInfo();
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    startInfo.Arguments = "";
    startInfo.UseShellExecute = true;
    startInfo.WorkingDirectory = Application.StartupPath;
    startInfo.CreateNoWindow = true;
    startInfo.FileName = Application.StartupPath + "\\cmd.bat";
    process.StartInfo = startInfo;

    process.Start();
    process.WaitForExit();
    System.Threading.Thread.Sleep(5000);

    string cmdOut = File.ReadAllText("out.txt");
    File.Delete("cmd.bat");
    File.Delete("out.txt");
    return cmdOut;
}

Upvotes: 1

Views: 2405

Answers (3)

i486
i486

Reputation: 6564

See this - I tnink it is what necessary: http://www.dotnetperls.com/redirectstandardoutput

Copied from the link above:

using System;
using System.Diagnostics;
using System.IO;

class Program
{
static void Main()
{
//
// Setup the process with the ProcessStartInfo class.
//
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = @"C:\7za.exe"; // Specify exe name.
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
//
// Start the process.
//
using (Process process = Process.Start(start))
{
    //
    // Read in all the text from the process with the StreamReader.
    //
    using (StreamReader reader = process.StandardOutput)
    {
    string result = reader.ReadToEnd();
    Console.Write(result);
    }
}
}
}

Upvotes: 2

HeadJ.E.M.
HeadJ.E.M.

Reputation: 101

Got It Working Thanks to @crashmstr

it outputs file as out.txt so just had to comment out File.Delete("out.txt");

Upvotes: 0

Tilak
Tilak

Reputation: 30688

use cmd /C for running console commands.

string command = "cmd /C read-info.exe " + textBox1.Text +"> File.txt";

Upvotes: 0

Related Questions