【问题标题】:how to handle spaces in file path if the folder contains the space?如果文件夹包含空格,如何处理文件路径中的空格?
【发布时间】:2011-06-29 13:38:56
【问题描述】:
public static void launchProcess(string processName, string arguments, out string output)
{
    Process p = new Process
    {
        StartInfo = { UseShellExecute = false, RedirectStandardOutput = true, FileName = processName, Arguments = arguments }
    };

    p.Start();
    output = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

}

如果我的参数包含如下文件名:

D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS

然后我得到错误:

【问题讨论】:

  • 你称之为“错误”的错误是什么?
  • 对参数使用双引号,例如"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS"

标签: c# .net file-io console-application


【解决方案1】:

它需要双引号,但也可能需要一个@来逐字处理字符串(verbatim string),即“\”在字符串中具有特殊含义,例如\t 表示一个选项卡,所以我们要忽略 \

所以不仅是双引号,还有@

string myArgument = @"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS";

【讨论】:

  • 删除了原始答案草稿,因为两者兼而有之会令人困惑。
【解决方案2】:

如果有空格,我在大多数应用程序(如果需要)中使用以下内容在字符串的开头和结尾添加双引号。

public string AddQuotesIfRequired(string path)
{
    return !string.IsNullOrWhiteSpace(path) ? 
        path.Contains(" ") && (!path.StartsWith("\"") && !path.EndsWith("\"")) ? 
            "\"" + path + "\"" : path : 
            string.Empty;
}

示例..

AddQuotesIfRequired(@"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS");

返回"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS"

AddQuotesIfRequired(@"C:\Test");

返回C:\Test

AddQuotesIfRequired(@"""C:\Test Test\Wrap""");

返回"C:\Test Test\Wrap"

AddQuotesIfRequired(" ");

返回空字符串

AddQuotesIfRequired(null);

返回空字符串

编辑

根据建议,更改了函数名称并添加了空引用检查。

添加了检查字符串的开头和结尾是否已经存在双引号,以免重复。

将字符串检查函数更改为IsNullOrWhiteSpace 以检查空格以及空或null,如果是,将返回一个空字符串。

【讨论】:

  • 好,但我会称它为 AddQuotesIfRequired 并在开始时添加一个空检查。
  • 另外,它不应该检查字符串是否已经用引号括起来吗?多次调用它自己的结果应该每次都产生相同的字符串。
【解决方案3】:

我知道这是一个旧线程,但是对于在我之后看到这个的人,你也可以这样做:

string myArgument="D:\\Visual Studio Projects\\ProjectOnTFS\\ProjectOnTFS"

通过转义反斜杠,您不必使用 @ 符号。只是另一种选择。

【讨论】:

  • 虽然这是正确的,因为我过去使用过它,但在字符串的开头添加 @ 会更简单且耗时更少,这表示一个真正的字符串。否则你会发现自己整天都在浪费时间添加反斜杠。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多