C#给变量赋值表示它找不到文件?
我有一个非常简单的方法来运行批处理文件。方法如下:C#给变量赋值表示它找不到文件?,c#,batch-file,process,C#,Batch File,Process,我有一个非常简单的方法来运行批处理文件。方法如下: private string _binnPath = Application.StartupPath + "\\Binn"; public void DumpFileSystem(string snapshotFolder) { var cwd = Directory.GetCurrentDirectory(); Directory.SetCurrentDirectory(_binnPath); var snaps
private string _binnPath = Application.StartupPath + "\\Binn";
public void DumpFileSystem(string snapshotFolder)
{
var cwd = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(_binnPath);
var snapshotOutput = Path.Combine(Application.StartupPath, snapshotFolder);
snapshotOutput = Path.Combine(snapshotOutput, DateTime.UtcNow.Ticks + "-files.txt");
var batCommand = _binnPath + "\\DumpFileSystem.bat";
string batFilename = batCommand + " " + snapshotOutput;
using (var process = Process.Start(batFilename))
{
process?.WaitForExit();
}
Directory.SetCurrentDirectory(cwd);
}
批处理文件如下所示:
dir /s c:\ > %1
在var batCommand=\u binnPath+“\\DumpFileSystem.bat”行上代码>我收到这个:
“System.ComponentModel.Win32Exception”类型的未处理异常
发生在System.dll中
其他信息:系统找不到指定的文件
这毫无意义,因为我只分配了一个变量。
我要做的就是使用snapshotOutput变量运行批处理文件。
这应该没那么难
问题
你知道如何运行批处理文件吗?及
当变量的设置甚至不应该查找文件时,为什么会抛出错误
您应该只显式地传递批处理的路径和参数。否则windows会尝试将参数合并到不存在的路径中
这是VisualStudio中的一种错觉,通常是由旧文件或代码优化引起的李>
请看这里:
您应该只显式地传递批处理的路径和参数。否则windows会尝试将参数合并到不存在的路径中
这是VisualStudio中的一种错觉,通常是由旧文件或代码优化引起的李>
请看这里:
删除这些代码
string batFilename = batCommand + " " + snapshotOutput;
您必须更改流程开始
Process.Start(new ProcessStartInfo(batCommand , snapshotOutput))
删除这些代码
string batFilename = batCommand + " " + snapshotOutput;
您必须更改流程开始
Process.Start(new ProcessStartInfo(batCommand , snapshotOutput))
在Process.Start(batFilename)上放置一个断点,调试并停止,查看batFilename的值并检查文件是否位于您期望的位置。更改是文件不在%APPROOT%/bin/debug/Binn文件夹中,我认为可能是因为您试图将参数传递到应该是路径的内容中。为什么调用SetCurrentDirectory函数?你试着注释掉那一行了吗?在Process.Start(batFilename)上放置一个断点,调试并停止,查看batFilename的值并检查文件是否在你期望的位置。更改是文件不在%APPROOT%/bin/debug/Binn文件夹中,我认为可能是因为您试图将参数传递到应该是路径的内容中。为什么调用SetCurrentDirectory函数?你试过评论那句话吗?直截了当。甚至比我自己的答案更喜欢它。好吧,这很有效——但为什么呢?你说我应该删除的那行只是一个变量赋值。“当错误发生时,我还没有开始运行进程。@Toxantron说得对:“这是Visual Studio中的一种错觉,通常是由较旧的文件或代码优化引起的。”错误出现在“process.Start”中,但Visual Studio在上面一行抛出异常。我建议在Process.Start之前在行上发出一个Console.Writeline,它将在两个版本中执行…直截了当。甚至比我自己的答案更喜欢它。好吧,这很有效——但为什么呢?你说我应该删除的那行只是一个变量赋值。“当错误发生时,我还没有开始运行进程。@Toxantron说得对:“这是Visual Studio中的一种错觉,通常是由较旧的文件或代码优化引起的。”错误出现在“process.Start”中,但Visual Studio在上面一行抛出异常。我建议在Process.Start之前在行上发出Console.Writeline,它将在两个版本中执行。。。