我有一个简单的 C# 控制台程序,它调用如下所示的函数:
static void DirTest()
{
string dir = "Temp";
for (int i = 0; i < int.MaxValue; i++)
{
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
string file = Path.Combine(dir, "sample.txt");
File.Create(file).Close();
File.Delete(file);
Directory.Delete(dir);
}
}
在某些 Win 7 机器上,此函数最终会引发异常(当 i 超过 100,000 时):
未处理的异常:System.UnauthorizedAccessException:对路径“D:\...\Temp\sample.txt”的访问被拒绝。 在 System.IO.__Error.WinIOError(Int32 错误代码,字符串可能全路径) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBU TES secAttrs、字符串 msgPath、布尔 bFromProxy) 在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare sh 是,Int32 bufferSize,FileOptions 选项) 在 System.IO.File.Create(字符串路径) 在 D:\Exceptions\Program.cs:line 118 中的 Exceptions.Program.DirTest() 在 D:\Exceptions\Program.cs 中的 Exceptions.Program.Main(String[] args): 第 167 行
这些机器安装了 McAfee 代理和 Cisco 安全代理以及许多其他软件。Windows Defender 被禁用。该程序正在管理员控制台中运行。该程序是为 .net 3.5 编译的。这是我在 W2k3 或 XP 机器上没有看到的。
如果我使用 procmon 来监视正在访问创建和删除“Temp\sample.txt”文件夹的所有事件和进程,我看到除了测试应用程序之外没有其他进程正在访问该路径。即使出现异常,procmon 中也没有列出其他进程。所以我不能证明这是杀毒软件的错。
有人知道可能出了什么问题吗?我是否在 Win7 上的 .net 中发现了一个错误;)
谢谢!