C# 文件夹的转义存在并用于创建目的

C# 文件夹的转义存在并用于创建目的,c#,.net,C#,.net,我有以下代码: if (!Directory.Exists(@"C:\" + reader1.GetString(ColIndex1) + @"\" + reader1.GetString(ColIndex2) + @"\" + reader1.GetString(ColIndex3))) { Directory.CreateDirectory(@"C:\" + reader1.GetString(ColIndex1) + @"\" + reader1.GetString(ColInde

我有以下代码:

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包含包含以下字符的文本:

\/:*?"<>|
\/:*?”|

代码无法正确创建文件夹。

您不需要检查子目录是否存在。
目录。CreateDirectory将创建您需要的所有子目录。有关详细信息,请查看文档

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

此外,与使用
@“\”
来表示字符串不同,更安全的方法是使用
路径。组合
。例如:

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")) ; 
它正在创建所有文件夹
a
b
c

编辑

如果要删除NValidCharPath。将帮助您执行此操作:

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

谢谢。这大大减少了代码,但似乎无法处理以下所有字符:*?“|