c# - 确定目录是否可以在 NTFS 上移动

标签 c# .net file winapi ntfs

我有一个目录,在复杂的子目录树中包含大量文件。

如果我尝试将该目录移动到同一分区上的另一个目录中,该操作理论上可能需要恒定的时间 - 基本上是重命名操作。 - 只要源目录中的文件都没有被使用并且没有安全问题,对吗?

如果是这样,我如何以编程方式判断是否可以将目录 A 移动到 B?

是否有任何与锁定相关的 API 可以帮助我解决这个问题?

我在 NTFS 分区上使用 C#。

最佳答案

在多任务操作系统上不存在这种“可以这样工作”的 API。它们本质上是不可靠的,比如检查文件是否被锁定。这样的测试可能会返回“未锁定”,然后您的线程可能会被抢占,而另一个进程中的另一个线程可能会锁定该文件。当您的线程重新获得 CPU 时,您会发现该文件已被锁定,即使测试表明它没有。

执行此操作的唯一方法是实际执行该操作,然后查找表明无法执行的错误。 C# 中的异常,使用 try 语句来捕获 IOException。处理起来并不容易,但至少 NTFS 允许您重命名或移动锁定的文件。

关于c# - 确定目录是否可以在 NTFS 上移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3275309/

相关文章:

c# - 通过字符串从 C# 动态对象获取属性值(反射?)

c# - 滚动条到达底部时Gridview自动加载数据

c# - TransactionScope 的好处/用途是什么?

file - 如何仅获取当前可执行文件路径的目录部分?

bash - 替换所有文件中的字符串 - Unix

c# - 如何使用代码优先 Entity Framework 指定外键

c# - 跨多个字符串的不同字符

c# - 如何将 XElement 添加到文档,避免 "incorrectly structured document"错误?

.net - 在 key 中使用 unicode 上传 AWS S3 失败 .NET 4.5

c# - 上传时网络客户端超时