C#不运行或删除文件

时间:2013-06-09 21:20:08

标签: c# batch-file

这个C#程序使批处理文件运行它然后应该删除该文件。当我运行程序时,它会生成批处理文件,并且如果最后一个if语句不存在则完美地执行它。但是使用最后一个if语句,它会生成文件并删除它,但不会进行任何更改。

 string batFile;
 batFile = genBat(textBox1.Text);
 string path = "C:\\Windows\\System32\\drivers\\etc\\blocksite.bat";

 using (StreamWriter sw = new StreamWriter(path))
 {
       sw.WriteLine(@batFile);
       sw.Close();
 }

       Process.Start(path);

 if(File.Exists(path))
 {
       File.Delete(path)
 }

2 个答案:

答案 0 :(得分:6)

可能会发生的情况是,在cmd.exe进程可以读取和处理之前,您正在设法删除.bat文件。在删除文件之前,您需要等待以Process.Start开头的进程完成。像这样:

using (var process = Process.Start(path)) {
    process.WaitForExit();
}

顺便说一句,我想知道为什么你觉得需要在你不应该写的目录中创建.bat文件。您可以在临时目录下轻松创建.bat文件。如果您需要将工作目录作为其他目录,则可以在启动该过程时轻松指定。

答案 1 :(得分:4)

您很有可能在进程实际开始处理之前删除该文件。您应该存储Process返回的Process.Start(作为一般规则,您不应该忽略.NET中操作的返回结果)并使用WaitForExit然后删除文件。

using (var process = Process.Start(path)) {
  process.WaitForExit();
}

记住Process是一次性的东西,忽略结果是更糟糕的主意。