【发布时间】:2012-04-24 13:11:12
【问题描述】:
我有一个简单的 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 中的错误;)
谢谢!
【问题讨论】:
-
你为什么要这样做?
-
这很可能是底层磁盘驱动程序或 NTFS 本身的问题,与 .NET 无关。以超过 100,000 倍的速度创建和删除目录和文件对于操作系统、磁盘或程序来说不太可能是健康的。正如@hamad 所说,你的用户名也要求它,为什么为什么为什么?
-
我的钱花在了用户帐户控制 (UAC) 上,这是这里的问题。您是否尝试过将您的 prog 提升为管理员权限?
-
可能你正在寻找这个:stackoverflow.com/questions/8821410/…>
-
hamad, yamen - 我写这个测试的原因是我在一个 24/7 做类似事情的软件上工作,虽然不是在同一个文件夹上,而是在巨大的文件共享上。