最终System.UnauthorizedAccessException:访问路径...被拒绝

时间:2012-04-12 07:34:52

标签: c# .net-3.5 disk-io

我有一个简单的C#console-program,它调用下面显示的函数:

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机器上,此函数最终会抛出异常(当我超过大约100,000时):

        Unhandled Exception: System.UnauthorizedAccessException: Access to the path 'D:\... \Temp\sample.txt' is denied.
       at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       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, String msgPath, Boolean bFromProxy)
       at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare sh
    are, Int32 bufferSize, FileOptions options)
       at System.IO.File.Create(String path)
       at Exceptions.Program.DirTest() in D:\Exceptions\Program.cs:line 118
       at Exceptions.Program.Main(String[] args) in D:\Exceptions\Program.cs:
    line 167

这些计算机安装了McAfee代理和思科安全代理以及许多其他软件。 Windows防御者被禁用。该程序在管理员控制台中运行。该程序是为.net 3.5编译的。我没有在W2k3或XP机器上看到过。

如果我使用procmon来监视正在访问创建和删除“Temp \ sample.txt”的文件夹的所有事件和进程,我会看到除了测试应用程序之外没有其他进程正在访问该路径。即使在异常之后,procmon中也没有列出其他进程。所以我无法证明这是反病毒的错误。

有人有任何想法可能有什么不对吗? 我是否在Win7上捕获了.net中的错误;)

谢谢!

2 个答案:

答案 0 :(得分:1)

代码适用于我的Maschine Windows 7/64位

我猜你的“反病毒”程序是检查每个创建的文件的问题。

我让McAffee跑了但没有思科......

希望这个答案可以提供任何帮助;)

答案 1 :(得分:1)

@whywhywhy

我稍微修改了你的代码以查看我是否可以获得更多信息,如果它在我的结尾会出错。

static void DirTest()
{
    string dir = "Temp";
    int i = 0;
    try
    {
        for (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);
            System.Console.WriteLine("Finished i: " + i);
        }
    }
    catch
    {
        System.Console.WriteLine("Error on i: " + i);
        throw;
    }
}

我经历了200,000次迭代而没有任何问题。我甚至在循环中注释掉了写作线,这会使它表现得更快,但仍然没有问题。

我不确定您使用的是哪个版本的visual studio,但是您可能想尝试以下几种方法: 1)检查VS和Windows的更新。 2)检查硬盘驱动器的驱动程序更新。

也许您也可以使用print语句运行修改后的代码...以查看它是否是计时问题。 print语句可能足以让事情顺利进行。如果是这种情况,那么我的猜测就和衙门一样。