假设我有一个文件:test.txt
并将其保存在我的硬盘上。
有没有办法确定文件在硬盘上保存的(物理)位置?
例如,在硬盘的第10轨道上的矢量12上。
我不知道我是否掌握了上述术语,但我希望你明白我的意思。
我想编写用户可以指向文件的程序,程序会找出文件在硬盘上的位置。像旧的碎片整理(它是Windows;)),它显示磁盘的哪些部分正在使用。
这叫做什么,可以实现吗? (我不是在寻找代码(虽然exmaples是好的),但是它是否可能)
P.S。客户端将是Windows 7(如果重要的话,请考虑NTFS。)
答案 0 :(得分:1)
我很确定在托管代码中执行那种低级别的磁盘i / o将是最困难的。这里有人做了类似的事情:
http://codebrainz.ca/index.php/2010/05/23/low-level-disk-io-in-managed-net/
你写的东西做这样的事情必须依赖于硬件:除非你知道你正在谈论什么硬件,否则你不知道它是如何物理存储数据的(例如,USB记忆棒没有拼盘,轨道或扇区,也没有旋转。然而,就所有意图和目的而言,它似乎是一个磁盘)。
通常,您会编写某种设备驱动程序来完成此任务。这个链接
http://en.wikibooks.org/wiki/Windows_Programming/Device_Driver_Introduction
可能有帮助。
答案 1 :(得分:0)
在Jeffrey Wall的WebLog中,你会发现Defrag API C# wrappers。他的GetFileMap
方法接近你需要的东西。
答案 2 :(得分:0)
可以从C ++开始,所以稍加干预就可以了。 在MSDN中查找FSCTL_GET_RETRIEVAL_POINTERS即可开始使用。