首页 > 解决方案 > Directory.Create 返回误报

问题描述

我们有一个应用程序有时会在两者上都返回误报Directory.Exist()Directory.CreateDirectory()而且它是随机发生的。

首先,该文件夹是测试计算机上的共享文件夹,对所有人具有完全权限,禁用防火墙且未安装防病毒软件。那台计算机正在运行,Windows Server 2008并且没有安装任何软件。共享文件夹已禁用缓存以不允许脱机模式。在这种情况下的文件夹路径是\\TestComputer\data\

在我们做的应用程序中:

// this in a loop with the 100-200 folders to create
CreateData(@"\\TestComputer\data\folder1\");


private void CreateData(string path)
{
    try
    {
        var dir = Directory.CreateDirectory(path);

        if(dir == null)
        {
            Console.WriteLine("path did not create properly");
        }
        else
        {
            if(Directory.Exist(path))
            {
                Console.WriteLine("path exist");

                CreateFiles(path);
            }
            else
            {
                Console.WriteLine("path does not exist");
            }
        }
    }
    catch(Exception ex)
    {
        Console.WriteLine("an error occured");
    }
}

现在的问题是,我们有时会在未创建文件夹时得到“路径存在”,因此不存在。所以这意味着Directory.CreateDirectory()确实返回了一个非空对象,并且除此之外Directory.Exist()还返回 true。这是一个错误的结果。

具有共享文件夹的服务器和使用该应用程序的 PC 都显示隐藏文件和系统文件,并且该文件夹不存在。我们知道,因为该示例代码之后的下一个方法将文件保存在该文件夹中,并且它失败并显示该文件夹不存在的错误(这是真的)。

我们已经验证了服务器和运行上述代码的 PC 上的所有虚拟商店,文件夹完全为空。

这段代码可以运行成百上千个文件夹(显然示例代码中的路径是一个实际变化的参数),偶尔它会告诉我文件夹已创建,它会说文件夹存在看到一个文件夹不存在。

我们创建的所有文件夹仅包含没有重音的标准字母,例如 a 到 z 和 A 到 Z、数字和 1 或 2 破折号,所以没什么特别的。

标签: c#io

解决方案


推荐阅读