文件夹存在时如何跳过并创建新文件夹

3
我有以下代码:
if (!Directory.Exists(@"C:\" + reader1.GetString(ColIndex1) + @"\" + reader1.GetString(ColIndex2) + @"\" + reader1.GetString(ColIndex3)))
{
    Directory.CreateDirectory(@"C:\" + reader1.GetString(ColIndex1) + @"\" + reader1.GetString(ColIndex2) + @"\" + reader1.GetString(ColIndex3));
}

我该如何转义这些值,以便正确检查文件夹是否存在并在需要时创建它们?
例如,如果ColIndex2包含以下字符的文本:
\/:*?"<>|

这段代码不能正常创建文件夹。

1个回答

6
您不需要检查子目录是否存在。 Directory.CreateDirectory 将创建所有需要的子目录。有关更多信息,请在此处查看文档 here

在指定的路径中创建所有目录和子目录。

此外,与其使用 @"\" 连接您的字符串,更安全的方法是使用 Path.Combine。例如:
String yourFullPath = Path.Combine(
      @"C:\", 
      reader1.GetString(ColIndex1),  
      reader1.GetString(ColIndex2), 
      reader1.GetString(ColIndex3)); 

// following will do nothing if yourFullPath already exists
Directory.CreateDirectory(yourFullPath) ;

最后,我尝试了这个示例,并使用了一个/字符:
System.IO.Directory.CreateDirectory(System.IO.Path.Combine(@"c:\", @"a/b\c")) ; 

它正在创建所有文件夹 abc

编辑

如果您想要删除无效字符路径。可以使用Path.GetInvalidFileNameChars()来帮助您:

char [] allInvalidChars = Path.GetInvalidFileNameChars(); 
string yourPathWithoutInvalidChars = new string(yourFullPath.ToCharArray().Where(c => !allInvalidChars.Contains(c)).ToArray());

谢谢。这大大减少了代码量,但似乎没有处理所有以下字符 \/:*?"<>| - oshirowanen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接