Получение информации о физическом устройстве по заданному пути к файлу
Вопрос
Предположим, у вас есть полный путь к доступному файлу или папке в системе.Как я могу получить какой-то уникальный идентификатор физического устройства, на котором фактически находится файл (или папка)?
Моя первая попытка заключалась в использовании System.IO.DriveInfo
это зависит от наличия буквы диска.Но пути UNC и несколько сетевых дисков, сопоставленных с одним и тем же физическим устройством на сервере, добавляют некоторые сложности.Например, все эти три пути указывают на одну и ту же папку на одном устройстве.
\\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\)
В конечном итоге моя цель — воспользоваться этими несколькими путями и сообщить об объеме используемого и свободного дискового пространства на каждом устройстве.Я хочу объединить эти три пути в один элемент отчета, а не в три отдельных элемента.
Существует ли какой-либо API Windows, который может помочь найти эту информацию по любому произвольному полному пути?
Решение
Этот вызов API-интерфейса Win должен дать вам все, что вам нужно относительно дискового пространства.
GetDiskFreeSpaceEx
http://msdn.microsoft.com/en-us/library/aa364937(VS.85).aspx
Кроме того, чтобы определить, относятся ли все три сопоставления к одному и тому же физическому диску, выполните вызов
GetVolumeInformation
и сравните серийные номера возвращенных томов
http://msdn.microsoft.com/en-us/library/aa364993(VS.85).aspx