我有以下代码:
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包含包含以下字符的文本:
\/:*?"<>|
代码无法正确创建文件夹。
答案 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")) ;
并创建了所有文件夹a
,b
和c
。
修改强>
如果要删除InvalidcharPath。 Path.GetInvalidFileNameChars()将帮助您这样做:
char [] allInvalidChars = Path.GetInvalidFileNameChars();
string yourPathWithoutInvalidChars = new string(yourFullPath.ToCharArray().Where(c => !allInvalidChars.Contains(c)).ToArray());