[DOSコマンド実行処理]
例えば、コマンドプロンプトでDOSコマンドでの
NET HELP
を実行する場合に該当するプログラムは、
System.Diagnostics.Process prog = new System.Diagnostics.Process();
prog.StartInfo.FileName = "NET";
prog.StartInfo.Arguments = "HELP";
prog.Start();
すなわち、他のプログラムを、自作プログラムの処理内で実行する場合に利用されるProcessクラスを使います。
[うまくいかないコマンド]
ただし、コマンドプロンプトでの
del c:\memo.txt
に該当する処理を
System.Diagnostics.Process prog = new System.Diagnostics.Process();
prog.StartInfo.FileName = "del";
prog.StartInfo.Arguments = "c:\\memo.txt";
prog.Start();
とすると、実行時にエラーになるようです。
これは、おそらく前者のNETが外部コマンドで、後者のdelが内部コマンドである違いによる物と思います。
内部コマンドは、OSの内部に持っているコマンドです。
これに対し、外部コマンドは、OSの外部上にあるコマンドですので、ある意味、一般のアプリと同じ立場のプログラムです。
[対策---BATファイル]
よって、バッチファイルにして実行して下さい。
すなわち、中身は
del c:\memo.txt
と書かれたテキストファイルを拡張子BATで作ります。
ここでは、ファイル名をc:\A.BATとするとします。
そして、そのA.BATファイルを実行するプログラムは、
System.Diagnostics.Process prog = new System.Diagnostics.Process();
prog.StartInfo.FileName = "c:\\A.BAT";
prog.Start();
これだと、うまくいきます。
[DOSコマンドを使わない本来の処理方法]
そもそも、DOSコマンド(del等)は、MS-DOS時代の古い物ですので、普通は、その対象機能に該当するC#でのクラスライブラリ(コントロール等も含む)を使います。
すなわち、ファイル削除ならば、
System.IO.File.Delete("c:\\memo.txt");
よって、普通は、DOSコマンドをプログラミング上では使いません。
ただし、バッチファイルの実行ならば、現行のシステムで、使われる場合も多くあります。
前例では、delコマンドの1行だけですが、複数行にわたって、決まりきった多くのコマンドを実行するのにバッチファイルは便利だからです。
例えば、夜中のシステムの運用を終える際に、その日の処理集計をするため、DOSコマンドのレベルで、決まりきった一連の処理を行う場合などです。
よって、どうしてもバッチファイルで対応しなければならない場合もあります。
[BATファイル編集]
しかし、BATファイルでは、上記のファイル名「c:\memo.txt」の部分は固定になってしまいます。
よって、質問のような用途の場合、文字列編集をして、「c:\memo.txt」の部分を書き換える必要があります。
例えば、質問のように、テキストボックスでファイル名を入力して、BATファイルを編集するには、
System.Text.Encoding EncoObj = System.Text.Encoding.GetEncoding("shift_jis");
System.IO.StreamWriter writer = new System.IO.StreamWriter(new System.IO.FileStream("c:\\A.BAT", System.IO.FileMode.Create), EncoObj);
// 文字列編集
String DosStr = "del " + textBox1.Text;
writer.Write(DosStr); // 1行分ファイル書き込み
writer.WriteLine(); // 改行コード書き込み
writer.Close(); // クローズ
これで、BATファイルが作成されますので、その後、BATファイルを実行するには、前述のProcessクラスでのコード例を使って下さい。
このように、DOSコマンドを使うと非常に手間がかかりますので、普通にDelete()メソッドを使った方が楽です。
しかし、どうしてもDOSコマンドを使わなければならない場合では、上記の通り、BATファイルを作成して、それを実行させるようにして下さい。
[備考]
上記では、Processクラスを使いましたが、同名のコントロールでも便利です。
使い方は、ほぼ同じで、例えばc:\\memo.txtというファイルを編集するためのメモ帳を起動するには、
process1.StartInfo.FileName = "notepad.exe";
process1.StartInfo.Arguments = "c:\\memo.txt";
process1.Start();
なお、起動したメモ帳が終了された時の処理も定義可能です。
デザイン画面で貼り付けたprocessコントロールをダブルクリックすると、process1_Exited()というメソッドが作成されるので、そこに処理を記述して下さい。
この場合、EnableRaisingEventsプロパティをtrueにする必要があります。
private void button1_Click(object sender, EventArgs e)
{
process1.StartInfo.FileName = "notepad.exe";
process1.StartInfo.Arguments = "c:\\memo.txt";
process1.EnableRaisingEvents = true; // 終了待ちを指定
process1.Start(); // 起動
}
private void process1_Exited(object sender, EventArgs e)
{
MessageBox.Show("メモ帳が終了されました。");
}
追
補足ありがとう御座います。