如果文件夹包含空格,如何处理文件路径中的空格?

vak*_*kas 8 .net c# file-io console-application

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();

}
Run Code Online (Sandbox Code Playgroud)

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

D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS
Run Code Online (Sandbox Code Playgroud)

然后我得到错误:

Ale*_*ith 12

它需要双打引号,但也可能需要@来对待字符串逐字(逐字字符串),即"\"在字符串中有特殊含义,例如\ t表示选项卡,所以我们要忽略\

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

string myArgument = @"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS";
Run Code Online (Sandbox Code Playgroud)

  • 删除了最初的草稿答案,因为两者都令人困惑。 (2认同)

Mas*_*ick 5

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

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

例子..

AddQuotesIfRequired(@"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS");
Run Code Online (Sandbox Code Playgroud)

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

AddQuotesIfRequired(@"C:\Test");
Run Code Online (Sandbox Code Playgroud)

返回 C:\Test

AddQuotesIfRequired(@"""C:\Test Test\Wrap""");
Run Code Online (Sandbox Code Playgroud)

返回 "C:\Test Test\Wrap"

AddQuotesIfRequired(" ");
Run Code Online (Sandbox Code Playgroud)

返回空字符串

AddQuotesIfRequired(null);
Run Code Online (Sandbox Code Playgroud)

返回空字符串

编辑

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

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

将字符串检查功能更改IsNullOrWhiteSpace为检查空格以及空或空,如果是,则返回空字符串.