Escape for Folder Exists和Create purpose

时间:2014-07-16 13:19:13

标签: c# .net

我有以下代码:

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 个答案:

答案 0 :(得分: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

修改

如果要删除InvalidcharPath。 Path.GetInvalidFileNameChars()将帮助您这样做:

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