WriteFile函数如何与磁盘上的其他数据交互?

时间:2014-11-06 17:18:02

标签: c# c++ file-io pinvoke

我使用WriteFile函数在磁盘上写入扇区。 WriteFile函数如何与驱动器或磁盘上的其他数据交互?如何在不意外删除其他文件的情况下编写文件?并且操作系统是否可能意外删除了我的文件?

2 个答案:

答案 0 :(得分:4)

直接写入磁盘时,您完全绕过文件系统。除非您重新实现读取和尊重文件系统所需的功能,否则您可能会破坏磁盘。您可能不仅会写入其他文件,但很可能会覆盖元数据 - 这是描述目录和文件的结构和位置,其属性等的信息。

如果磁盘已经包含一个正常运行的文件系统并且您不想打扰它,那么几乎没有任何情况我可以想象直接写入磁盘的意义。如果要将文件写入磁盘,请执行此操作。我怀疑你的推理错误导致你认为你应该直接写入磁盘。

答案 1 :(得分:2)

您是否真的在磁盘上写扇区而不是在磁盘上文件?一些背景信息本来就很棒,因为如果你真的写入原始磁盘表面而不是写入磁盘上的文件,通过操作系统,使用更高级别的函数,如fopen(),fwrite(),甚至高于那个,那么你应该这样做是有充分理由的。我们可以询问这个原因是什么吗?

如果您正在编写磁盘扇区而不考虑磁盘具有哪些文件系统,那么所有的赌注都会关闭。假设操作系统允许这样做,没有什么可以保护您免于覆盖关键磁盘数据或操作系统覆盖您的文件。

我已经这样做了访问嵌入式系统上的编号扇区,这些扇区与“外部世界”(PC)的唯一联系是一个自定义的黑客USB大容量存储接口。即便如此,每次我不得不这样做时都会出现冷汗 - 如果我的代码不小心写入了PC的硬盘,那么硬盘上的操作系统安装和所有文件都可能是再见的。写给它。