1

プロジェクトでコマンド プロンプトを使用する必要があります。すべて問題ありませんが、出力は私が望むものではありません。私がこれを行う場合:

        ProcessStartInfo info = new ProcessStartInfo("cmd","/c dir c:\\test");
        info.RedirectStandardOutput = true;
        info.RedirectStandardInput = true;
        info.CreateNoWindow = true;
        info.UseShellExecute = false;
        Process p = new Process();
        p.StartInfo = info;
        p.Start();
        string iii = p.StandardOutput.ReadToEnd();
        textBox1.Text = iii;

結果はOKです。まさに私が望むように。しかし、さらにいくつかのコマンドを送信する必要もあります。だから私はこれをやっています:

        ProcessStartInfo info = new ProcessStartInfo("cmd");
        info.RedirectStandardOutput = true;
        info.RedirectStandardInput = true;
        info.CreateNoWindow = true;
        info.UseShellExecute = false;
        Process p = new Process();
        p.StartInfo = info;
        p.Start();
        StreamWriter write = p.StandardInput;
        write.WriteLine("dir c:\\test");
        write.Close();
        string iii = p.StandardOutput.ReadToEnd();
        textBox1.Text = iii;

しかし、結果は以前のようではありません。パスとすべてをcmdで提供していますが、これは望ましくありません。コマンドプロンプトからの結果だけが必要で、他には何も必要ありません。誰かが助けてくれることを願っています。私の問題を読んでくれてありがとう。

4

1 に答える 1

0

やりたいことの実装を示し、「なぜ私の実装が期待どおりに機能しないのか」という観点から質問を投げかけました。一歩下がって、「私が必要としているのは...」(WINI) と知らせることができれば、(私は思うに) 本当の答えを出すことができます。

例えば:

WINI を「'c:\test' のディレクトリ リストが必要です」と解釈すると、必要な生データを提供する、本当にシンプルで小さなコンソール アプリを作成することになります。残りは書式設定です。関心の分離を考えてください。

次に、自分に最適な形式で好きなものを提供できるプローブ アプリを作成します。次に、パーサーを使用して出力を解析します。

したがって、小さなコンソール アプリで次のようなことができます。

    public class Hyperthetical
{
    public void MyDemoCall(string root)
    {
        Console.WriteLine("-- start --");
        GiveMeADirectoryListingAsIWantIt(root)
        Console.WriteLine("-- end --");
    }

    public void GiveMeADirectoryListingAsIWantIt(string directory)
    {
        Console.WriteLine("Folder '{0}':", directory);

        foreach (var filePath in System.IO.Directory.GetFiles(directory))
        {
            var fileInfo = new FileInfo(filePath);
            Console.WriteLine("File: '{0}', {1}", fileInfo.Name, fileInfo.Length);
        }

        foreach (var subFolders in System.IO.Directory.GetDirectories(directory))
        {
            GiveMeADirectoryListingAsIWantIt(subFolders);
        }
    }
}

直接的な答えではありませんが、本当の答えかもしれません。

于 2013-01-12T07:13:55.783 に答える