找出硬盘上安装程序/文件的位置

时间:2012-01-26 17:34:40

标签: c# windows

假设我有一个文件:test.txt并将其保存在我的硬盘上。

有没有办法确定文件在硬盘上保存的(物理)位置?

例如,在硬盘的第10轨道上的矢量12上。

我不知道我是否掌握了上述术语,但我希望你明白我的意思。

我想编写用户可以指向文件的程序,程序会找出文件在硬盘上的位置。像旧的碎片整理(它是Windows;)),它显示磁盘的哪些部分正在使用。

这叫做什么,可以实现吗? (我不是在寻找代码(虽然exmaples是好的),但是它是否可能)

P.S。客户端将是Windows 7(如果重要的话,请考虑NTFS。)

3 个答案:

答案 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即可开始使用。