Самый простой способ - просто сделать это (например, попытаться прочитать файл). Как упоминал Джаред, нет способа убедиться, что вы сможете читать в будущем (сбой сети, изменение разрешений и т. Д.).
Что касается кода, вы можете использовать класс DirectoryInfo для некоторых попыток ответа:
string remotePath = @"\\server\share$";
bool haveAccess = false;
DirectoryInfo di = new DirectoryInfo(remotePath);
if (di.Exists)
{
try
{
// you could also call GetDirectories or GetFiles
// to test them individually
// this will throw an exception if you don't have
// rights to the directory, though
var acl = di.GetAccessControl();
haveAccess = true;
}
catch (UnauthorizedAccessException uae)
{
if (uae.Message.Contains("read-only"))
{
// seems like it is just read-only
haveAccess = true;
}
// no access, sorry
// do something else...
}
}
В приведенном выше коде много недостатков (например, жестко закодированный тест «только для чтения»), но это всего лишь пример, используемый для иллюстрации того, что вы можете сделать. В DirectoryInfo есть несколько других вспомогательных методов, которые вы можете использовать для отображения файлов в папке. Если у вас нет доступа, методы вызовут исключение UnauthorizedAccessException
, которое вы можете использовать для проверки причины сбоя доступа. Ознакомьтесь с информацией о GetAccessControl для получения дополнительной информации об исключениях, которые он выдает.