如何使用空格在文件夹名称周围加双引号

时间:2016-01-08 19:42:49

标签: c# .net string path

这是我的代码

string path1 = @"C:\Program Files (x86)\Common Files";
string path2 = @"Microsoft Shared";
string path = Path.Combine(path1, path2);

Console.WriteLine(path);

输出提供给我

  

C:\ Program Files(x86)\ Common Files \ Microsoft Shared

我想在双引号中有任何带空格的文件夹名称,如下所示

  

C:\“Program Files(x86)”\“Common Files”\“Microsoft Shared”

我怎么能得到它?

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用LINQ。

您可以将文件夹路径拆分为列出所有文件夹名称的数组,然后使用Select()操作每个单独的元素。

在您的情况下,您可能希望:

  1. 将字符串拆分为数组(使用' /'分隔元素)
  2. 如果文件夹名称包含空格
  3. ,请将文件夹名称格式设置为"{folderName}"
  4. 将数组作为单个字符串重新加入,使用' /'为你的分隔符
  5. 这就是看起来的样子,请注意我已经使用了2 Select()来表示清晰度&帮助确定不同的步骤。它们可以是一个单一的陈述。

            string path1 = @"C:\Program Files (x86)\Common Files";
            string path2 = @"Microsoft Shared";
            string path = System.IO.Path.Combine(path1, path2);
    
            var folderNames = path.Split('\\');
    
            folderNames = folderNames.Select(fn => (fn.Contains(' ')) ? String.Format("\"{0}\"", fn) : fn)
                                     .ToArray();
    
            var fullPathWithQuotes = String.Join("\\", folderNames);
    

    上述过程的输出是:

      

    C:\"程序文件(x86)" \"公共文件" \" Microsoft共享"

答案 1 :(得分:0)

您可以创建扩展方法

public static class Ex
{
    public static string PathForBatchFile(this string input)
    {
        return input.Contains(" ") ? $"\"{input}\"" : input;
    }
}

一样使用它
var path = @"C:\Program Files (x86)\Common Files\Microsoft Shared";
Console.WriteLine(path.PathForBatchFile());

它使用C#6.0中的string interpolation功能。如果您不使用C#6.0,则可以使用它。

public static class Ex
{
    public static string PathForBatchFile(this string input)
    {
        return input.Contains(" ") ? string.Format("\"{0}\"", input) : input;
    }
}