Определите, находятся ли 2 пути UNC на одном и том же удаленном компьютере на одном и том же томе.
Я работаю над службой, которая имеет особые условия, если два указанных ей пути UNC находятся в одном и том же томе. Однако мне еще предстоит выяснить способ определения этого, поскольку класс C# DriveInfo не работает с путями UNC.
EX:
\\server\path_a находится на диске A
\\server\path_b находится на диске B
Есть ли способ сообщить, что \\server\path_a и \\server\path_b не находятся на одном и том же диске удаленно?
2 ответа
В C++ я использовал бы общий доступ netenum, чтобы получить удаленный физический путь, а затем проверить, находятся ли они на том же пути. Вы могли бы, вероятно, то же самое в C#
Конечно, вы можете, но вам нужно будет использовать PInvoke для вызова интерфейса WinAPI, расположенного в библиотеке NetAPI32. Например:
В зависимости от ваших потребностей вы можете получить структуру SHARE_INFO_2 для общих ресурсов, вызвав NetShareGetInfo, которая предоставит вам этот информационный объект для общего ресурса. Посмотрите на структуру здесь. Свойство shi2_path даст вам локальный путь, который содержит диск.
В документации MSDN говорится об этом свойстве:
shi2_path
Указатель на строку Unicode, указывающий локальный путь для общего ресурса. Для дисков shi2_path - это разделяемый путь.
Обратите внимание: для получения объекта SHARE_INFO_2 у вас должно быть достаточно учетных данных.
Затем, когда вы получаете оба пути, вы можете сделать что-то вроде (очень элементарно):
bool isDriveEqual = sharePath1[0] == sharePath2[0];