加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 删除和创建目录的奇怪情况

发布时间:2020-12-13 22:35:43 所属栏目:Windows 来源:网络整理
导读:我有一个奇怪的情况,在 Windows Server 2008上快速连续删除和创建目录会导致一些偶然的奇怪错误.有时我得到IOExceptions,有一次我有NotAuthorizedException. 这是我的代码,但是当在调试器中单步执行时,会抛出许多异常.事实上,在执行directory.delete时,我刚
我有一个奇怪的情况,在 Windows Server 2008上快速连续删除和创建目录会导致一些偶然的奇怪错误.有时我得到IOExceptions,有一次我有NotAuthorizedException.

这是我的代码,但是当在调试器中单步执行时,会抛出许多异常.事实上,在执行directory.delete时,我刚刚发生了一个带有’目录不为空’的IOException!

更新
相当多的回复谈论非原子目录创建和延迟写入等.是否有100%保证的方式使这项工作?理想情况下,我想要一些系统调用’DeleteDirectoryAndWaitForTheDirectoryToBeDeleted’和相应的系统调用’CreateDirectoryAndWaitForTheDirectoryToBeCreated’.

另一个更新
我在下面使用了Neil的代码并在我的机器上进行了尝试,它很快就失败了(在20次循环之后).似乎正在发生的事情是IDriveE服务可以访问该目录,并且尝试创建目录失败并使用DELETE PENDING.我想我需要再做一些像DELETE PENDING这样的研究.

我个人不喜欢这个代码,因为它“闻起来”错了 – 但它确实有效.

Console.WriteLine("CleanAndCreateDirectory: {0}",baseDirectory);
while (Directory.Exists(baseDirectory))
{
    Console.WriteLine("DeleteDirectory: {0}",baseDirectory);
    try
    {
        Directory.Delete(baseDirectory,true);
    }
    catch (Exception ex)
    {
        Console.Error.WriteLine(ex.Message);
        Thread.Sleep(1000);
    }
}

while (!Directory.Exists(baseDirectory))
{
    try
    {
        Directory.CreateDirectory(baseDirectory);
    }
    catch (Exception ex)
    {
        Console.Error.WriteLine(ex.Message);
    }
}

我的怀疑是观察文件系统导致某些操作延迟的事情,但我不知道是什么.

解决方法

当您从文件系统中删除某个项目时,它不会立即将其删除 – 它会在以后将其标记为删除(如果该目录包含子文件夹/文件,则会抛出异常).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读