Получение информации о физическом устройстве из заданного пути к файлу

Предположим, у вас есть полный путь к доступному файлу или папке в системе. Как я могу получить какой-то уникальный идентификатор физического устройства, на котором фактически находится файл (или папка)?

Моей первой попыткой было использовать System.IO.DriveInfo, что зависит от наличия буквы диска. Но пути UNC и несколько сетевых дисков, сопоставленных с одним и тем же физическим устройством на сервере, добавляют некоторые сложности. Например, все эти 3 пути указывают на одну и ту же папку на одном устройстве.

\\myserver\users\brian\public\music\
s:\users\brian\public\music\          (here s:\ is mapped to \\myserver\)
u:\public\users\music\                (here u:\ is mapped to \\myserver\users\brian\)

В конечном счете, моя цель состоит в том, чтобы использовать эти несколько путей и сообщать об объеме используемого и свободного дискового пространства на каждом устройстве. Я хочу объединить эти 3 пути в один элемент отчета, а не в 3 отдельных элемента.

Есть ли какой-либо Windows API, который может помочь найти эту информацию по любому произвольному полному пути?


person Brian Ensink    schedule 22.09.2008    source источник


Ответы (1)


Этот вызов win API должен дать вам то, что вам нужно в отношении дискового пространства.

  GetDiskFreeSpaceEx

http://msdn.microsoft.com/en-us/library/aa364937(VS.85).aspx

Кроме того, чтобы определить, относятся ли все три сопоставления к одному и тому же физическому диску, выполните вызов

GetVolumeInformation

и сравните возвращенные серийные номера томов

http://msdn.microsoft.com/en-us/library/aa364993(VS.85).aspx

person curtisk    schedule 22.09.2008
comment
Но когда я передам каждый из этих трех путей в своем вопросе к этой функции, я получу 3 ответа - да, все они будут одинаковыми, но как я могу точно знать, что все они находятся на одном физическом устройстве? - person Brian Ensink; 22.09.2008
comment
затем сначала вызовите GetVolumeInformation и сравните серийные номера томов, чтобы определить, имеете ли вы дело с одним и тем же диском. msdn.microsoft.com/en-us/library/aa364993 (VS.85).aspx - person curtisk; 22.09.2008