c# - 文件移动——操作系统如何知道是更新主文件表还是复制和删除?

标签 c# c++ .net c windows

在阅读了关于如何判断两个文件是否在同一个物理卷上的问题,并看到它(几乎)不可能(例如 here )后,我想知道操作系统如何知道一个文件是否移动操作应该更新一个主文件表(或等同物)或是否复制和删除。

Windows 是否以某种方式将其委托(delegate)给驱动器? (或者也许操作系统确实有关于每个文件的信息,只是程序无法访问它?不太可能。)

或者 - Windows 是否只知道某些类型的驱动器(以及在其他情况下的复制和删除)?在这种情况下,我们也可以假设相同。例如,这意味着允许文件移动而不使用后台线程。 (因为它几乎是瞬时的。)

我正在努力更好地理解这个主题。如果我做出了一些基本的错误假设 - 请纠正它本身就是一个答案。

如果需要限制范围,让我们专注于 Windows 7 及更高版本,以及 NTFS 和 FAT 驱动器。

最佳答案

当然,操作系统知道哪个驱动器(以及该驱动器上的哪个分区)包含任何特定的本地文件;否则,它如何读取数据? (对于远程文件,操作系统不知道驱动器,但它知道联系哪个服务器。不同服务器之间的移动被实现为复制和删除;同一服务器上的移动要么是复制和删除或委托(delegate)给该服务器,具体取决于使用的协议(protocol)。)

此信息也可用于应用程序。您可以使用 GetFileInformationByHandle()函数获取包含特定文件的卷的序列号。

关于c# - 文件移动——操作系统如何知道是更新主文件表还是复制和删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28284879/

相关文章:

c# - 如何将数组作为参数发送到 C# 中的 quartz 计划作业?

c# - 帮助编写文件夹结构的算法

c# - 从后面的 C# 代码调用 JavaScript

.net - 避免序列化 REST 服务中的某些属性

c# - Lucene.Net NGramAnalyzer 使用引用的 ngram 生成查询,例如 [ titleNGram :"his ist sto tor ory"] 而不是 [ titleNGram :his ist sto tor ory]

从其他方法返回 vector 时,C++ 无法访问 vector 元素

c++ - 使用 cmake 将 Eigen 库添加到 C++ 项目

c++ - std::sort 将元素与 null 进行比较

c# - 在单个 BackgroundWorker 上运行多个 DoWork 函数是否安全?

c# - 哪些类型的异常不要捕获?