在 C# 中使用 CreateDirectory 避免 NotSupportedException
Posted
技术标签:
【中文标题】在 C# 中使用 CreateDirectory 避免 NotSupportedException【英文标题】:Avoiding NotSupportedException using CreateDirectory in c# 【发布时间】:2011-09-14 23:42:17 【问题描述】:我正在尝试递归地创建一堆目录,并且某些目录名称包含“:”字符,其中会引发上述异常。我希望有办法避免这种情况? 下面是我正在使用的代码片段:
foreach (TagLib.File tagFile in tagFiles)
GetInfo(tagFile, targetDir);
if (!Directory.Exists(TargetFullPath))
Directory.CreateDirectory(TargetFullPath);
System.IO.File.Copy(FilePath, TargetFullPath + "\\" + tagFile.Tag.Title + TargetExt);
...
'TargetFullPath' = "G:\Users\Jon\Desktop\musictest\Journey\Journey: Greatest Hits"
非常感谢:)
【问题讨论】:
:
不允许出现在目录或文件名中。就是这样。没有解决方法。只需将其替换为 _
或类似的东西。
与问题不完全相关,但您应该在构建路径字符串时尝试使用Path.Combine。
【参考方案1】:
冒号是你不能使用的字符之一,但你可以很容易地替换它。为了确保您只替换文件名部分中的字符(这样您就不会清除构成文件路径其余部分的反斜杠),您可以使用:
Path.Combine(Path.GetDirectoryName(TargetFullPath),Path.GetFileName(TargetFullPath).Replace(":","_"));
假设文件名 (see this list) 中可能存在其他非法字符,您将需要更健壮的内容,例如 Regex 语句。
【讨论】:
以上是关于在 C# 中使用 CreateDirectory 避免 NotSupportedException的主要内容,如果未能解决你的问题,请参考以下文章
(64)C#里使用GetCurrentDirectory()Exists()CreateDirectory() Environment.CurrentDirectory
C# WMI 在远程 PC 上运行一个 exe,然后在同一台 PC 上运行另一个 exe,然后在网络路径上调用 Directory.CreateDirectory 并失败
使用 CreateDirectory 动态创建 web 文件夹
如何使用 Unicode 集将 std::string 传递给 CreateDirectory