无法将文件路径作为命令行参数传递,其中path包含空格?

时间:2016-03-27 16:57:43

标签: c# .net windows command-prompt

我有一个C#GUI,允许用户选择一个文件,然后针对objdump运行它,将内容输出到GUI。

但是,当用户选择路径包含空格的文件时,我遇到问题,导致命令行执行中断。

我浏览了Stackoverflow,似乎有所有这些用于Windows脚本的黑客攻击,因为带空格的路径不容易解决。但是,当我以编程方式传递文件名时,我不能这样做/有更简单的方法吗?

这是我的代码:

private void button1_Click(object sender, EventArgs e)
{

    DialogResult result = openFileDialog1.ShowDialog();
    if (result == DialogResult.OK){
        dataGridView1.Rows.Clear();
        dataGridView1.Refresh();

        string filename = openFileDialog1.FileName;           //May contain spaces
        try
            {
                var proc = new Process
                {
                    StartInfo = new ProcessStartInfo
                    {
                        FileName = "dumpbin.exe",
                        Arguments = "/DISASM " + filename,    // Causing this to fail
                        UseShellExecute = false,
                        RedirectStandardOutput = true,
                        CreateNoWindow = true
                    }
                };

                proc.Start();

3 个答案:

答案 0 :(得分:2)

您需要使用双引号包装文件名,就像通常从命令行一样。

试试这个:

Arguments = "/DISASM \"" + filename + "\"",

答案 1 :(得分:0)

尝试在路径周围加上引号

pSInfo.Argument = @"""c:\test cases\testfile.csv""";

或者如果您愿意

pSInfo.Argument = "\"c:\\test cases\\testfile.csv\"";

答案 2 :(得分:0)

filename附近使用引号:

Arguments = $"/DISASM \"{filename}\"",