2012-01-26 4 views
5

Предположим, у меня есть файл: test.txt, и я сохраняю его на своем жестком диске.Узнайте, в каком месте на жестком диске установлена ​​программа/файл

Есть ли способ определить, на каком (физическом) месте файл сохраняется на жестком диске?

Например, на векторе 12 на дорожке 10 жесткого диска.

Я не знаю, получил ли я право на терминологию выше, но я надеюсь, что вы поняли, что я имею в виду.

Я хочу написать программу, в которой пользователь может указать файл, и программа узнает, где находится файл на жестком диске. Что-то вроде старой дефрагментации (это Windows;)), где она показывает, какие части диска используются.

Что это называется и может ли оно быть достигнуто? (Я не ищу код (хотя exmaples ok ofc), но возможно ли это возможно)

P.S. Клиентом будет Windows 7 (так что подумайте о NTFS, если это имеет значение).

+0

Могу я спросить ** почему ** вам нужно знать, что файл x является «на векторе 12 на дорожке 10»? – gdoron

ответ

1

Я уверен, что выполнение этого типа низкоуровневого диска в управляемом коде будет ... сложным, в лучшем случае. Вот кто-то, что сделал что-то вроде этого:

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

может помочь.

0

В WebLog Джеффри Уолл вы найдете Defrag API C# wrappers. Его метод GetFileMap подходит, чтобы приблизиться к тому, что вам нужно.

0

Возможно с C++, поэтому с небольшим количеством вопросов вам должно быть хорошо. Обратите внимание: FSCTL_GET_RETRIEVAL_POINTERS в MSDN, чтобы вы начали.

Смежные вопросы