3

私は次のコードを使用しています

System::Diagnostics::Process^ p = gcnew System::Diagnostics::Process();
p->StartInfo->FileName =  "tnccmd.exe";
p->StartInfo->UseShellExecute = false;
p->StartInfo->RedirectStandardInput = true;
p->StartInfo->RedirectStandardOutput = true; 
p->Start();
System::IO::StreamWriter^ tnc_stdin = p->StandardInput;
System::IO::StreamReader^ tnc_stdout = p->StandardOutput;

tnc_stdin->WriteLine("connect i 127.0.0.1");
String^ prg_output = tnc_stdout->ReadToEnd();

stdout私の問題は、正しく読めないことです。簡単に書き込むことができますがstdin、エラーチェックコードを実装しようとしていますが、機能しません。

私が使用しているプログラムはstdout、コマンドラインで実行させても書き込みができないようです。デフォルトで付属してbugいるを再現できます。コマンドプロンプトでを変更すると、通常はに表示されません。ftp.exeWindows XP->FileNameftp.exeftp.exeftp>prg_output

プロンプトはある種のものを使用する必要があり、windows shell curses問題を混同している可能性があることがわかりました。

connect i 127.0.0.1通常、私が受けるはずの指示の直後ですconnecting to 127.0.0.1...が、何も受け取りません。

私が間違っていることについてのヒントはありますか?stdout私が知らない別の種類はありますか?

編集

と同じように、書く行が複数あるため、引数を使用できませんftp.exe。また、ftp.exedirなどのコマンドを入力すると出力されます。少なくとも、不明なコマンドを記述したときに出力されますが、について文句を言いますInvalid command

4

4 に答える 4

0

BeginOutputReadLineを呼び出すのを忘れたと思います

于 2009-04-10T18:23:09.963 に答える
0

実際にはコマンドライン引数であるべきものを標準入力に送信しようとしていると思われます。通常、どのように tnccmd.exe を呼び出しますか? このようなもの?

tnccmd.exe connect i 127.0.0.1

その場合、"connect i 127.0.0.1" は stdin ではなく、p->StartInfo->Arguments で渡す必要があります。

(ftp.exe の問題はプログラムにあるのではなく、標準出力がコンソールかどうかを調べる ftp.exe 自体にあります。その出力がコンソールにない場合、「ftp>」は出力されません。スクリプトを作成しようとしているプログラムが同じことを行う可能性もあります。)

于 2008-11-25T21:31:15.407 に答える
0

バッファリングの問題かもしれません。

tnc_stdin をフラッシュしようとするとどうなりますか? このようなことを試してください:

tnc_stdin->WriteLine("connect i 127.0.0.1");
tnc_stdin->Flush();

編集:使用しているStreamWriterのctorを確認しました(リフレクタールール!)それによると、デフォルトのバッファーサイズは1024バイトです...したがって、フラッシュする必要があります:-)またはより小さなバッファーを定義できます。

    public StreamWriter(string path) : 
this(path, false, new UTF8Encoding(false, true), 0x400)
    {
    }
于 2008-11-25T21:31:16.890 に答える
0

マネージ アプリケーションから標準の Out と Err の両方をキャプチャする方法については、このブログ投稿を参照してください。CLR を使用すると、間違ったことを実行してデッドロックを起こしやすくなります。

System.Diagnostics.Process を正しく使用する方法

于 2013-09-05T22:39:45.743 に答える