在 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

与长路径一起使用时,CreateDirectory 失败并出现错误 123

在 C# 中找不到创建的目录 [重复]