尝试创建目录时出现IOException("文件或目录已存在")

Emm*_*own 7 .net c# ironpython

我在C#项目中遇到一个奇怪的问题,它在尝试通过IronPython脚本创建目录时发生.这是代码:

targetTemplateDirectory = Path.Combine(Data, "Templates\\CheckedReports")

if not Directory.Exists(targetTemplateDirectory):
    Directory.CreateDirectory(targetTemplateDirectory)
Run Code Online (Sandbox Code Playgroud)

问题是IOException告诉我无法创建文件夹,"H:\ProductName\Data\Templates\CheckedReports"因为已经存在具有相同名称的文件或目录.

根据MSDN,该方法Directory.CreateDirectory()在目录已存在时不会抛出任何异常.

我知道名为" CheckedReports" 的文件可能是此异常的原因,但客户非常非常不可能手动创建该文件.除此之外,没有包含单词" CheckedReports" 的代码行(除了上面提到的脚本).此外,该应用程序被数千​​名客户使用,该脚本在每台机器上执行,只有一位客户报告了此问题.

除了具有相同名称的文件之外,是否有可能发生此异常?也许与权限,可移动媒体或网络驱动器相关的东西?

Cuc*_*ser 9

虽然仅为一个用户使用它有点过分,但应该可以检查是否存在具有该名称的文件.

FileInfo myFile = new FileInfo(targetTemplateDirectory);
if (myFile.Exists)
    myFile.Delete();

if (!Directory.Exists(targetTemplateDirectory))
    Directory.CreateDirectory(targetTemplateDirectory);
Run Code Online (Sandbox Code Playgroud)

可能这将解决问题,如果I/O异常是由具有相同名称的文件引起的.如果它是由用户引起的,因为"网络名称未知",那么我也不会有任何线索.


egl*_*ius 3

我们也有同样的情况,在我们的例子中,很明显这是一个权限问题。我们期待记录的 UnauthorizedAccessException,但这不是我们得到的。

在堆栈中,我们有 Directory.CreateDirectory 调用 Directory.InternalCreateDirectory。

里面有这样的注释:

        //Note that InternalExists may fail due 
        // to Win32 ACL's preventing us from seeing a directory, and this
        // isn't threadsafe. 
Run Code Online (Sandbox Code Playgroud)

还有更多关于它的注释,更深入地说明这一事实,代码可能会尝试创建当它看不到时已经存在的目录。