我们有一个应用程序,有时会在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破折号,所以没什么特别的。