- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在尝试从 C# 代码中删除目录时遇到非常间歇性的“目录不为空”错误,但当我查看时,该目录似乎是空的。
实际情况是这样的:进程 A 使用同步 .Net 远程调用调用进程 B,进程 B 从目录中删除文件,然后返回到进程 A,进程 A 删除目录本身。该磁盘是本地连接的 NTFS 磁盘(可能是 SATA)。
我想知道当您有两个进程以这种方式协作时,是否存在与 NTFS 的竞争条件,其中进程 B 的删除调用尚未完全刷新到文件系统?
当然,更明显的答案是该目录当时确实不为空,在我查看它之前其他东西清空了它,但我不明白这怎么会发生在我当前的应用程序中,因为没有其他进程这将删除文件。
最佳答案
当然,删除目录在多任务操作系统上是一项危险的冒险。您总是有另一个进程打开文件的风险。未能删除您方案中的目录有两个主要原因:
特别麻烦 - 有些进程打开文件的方式不会阻止您删除文件,但仍然会导致删除目录失败并出现此错误。搜索索引器和反恶意软件属于这一类。他们将使用 .NET 程序中的删除共享 FileShare.Delete 打开文件。删除文件工作正常。但是文件不会消失,直到他们关闭文件句柄。因此,在他们删除目录之前,您不能删除该目录。
很难诊断将目录选为其当前工作目录的进程。 .NET 程序中的 Environment.CurrentDirectory。资源管理器往往会触发此操作,只需查看目录就足以防止它被删除。
这些事故的发生完全超出了您的控制范围。您将需要处理它们,捕获异常是必需的。稍后再试几乎无能为力,但是您需要等待的时间没有上限。重命名目录并给它一个“垃圾”名称是一个很好的策略。请注意 Windows 中的回收站基本上遵循这种情况,它不仅仅用于回收 :)
关于c# - 目录为空时报错 "The directory is not empty.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23080837/
我无法在附加行中显示“真”、“假”、"is"和“否”按钮。 我在这里有一个应用程序:Application 请按照以下步骤使用应用程序: 1。当你打开应用程序时,你会看到一个绿色的加号按钮,点击 在此
我是一名优秀的程序员,十分优秀!