Согласно this MSDN article, Directory.Exists может возвращать ложные негативы (каталог существует, но вы не можете его прочитать или подобное). Мне было интересно, есть ли подобный метод, вместо того, чтобы возвращать true или false, возвращает что-то более информативное ... например «access denied» или, возможно, «слишком длинный путь» ...Надежный каталог. Использует C#
ответ
Вы можете попробовать создать DirectoryInfo
вместо этого. Конструктор должен исключать исключения, если путь недействителен или у пользователя нет доступа. Вы все равно должны проверить, существует ли это.
try
{
var di = new DirectoryInfo(path);
if(di.Exists)
{
//The directory exists
}
else
{
//The path is valid, but does not exist.
}
}
catch(Exception e)
{
//The path is invalid or user does not have access.
}
Существует Directory.GetAccessControl()
метод, который вы можете использовать, чтобы получить перечислимые но нечитаемые каталоги:
public static bool DirectoryVisible(string path)
{
try
{
Directory.GetAccessControl(path);
return true;
}
catch (UnauthorizedAccessException)
{
return true;
}
catch
{
return false;
}
}
Вы также можете использовать DirectoryInfo
класс. Он поставляется с Exists
и Attributes
. Если есть UnauthorizedAccessException
, брошенный при доступе к свойству Attributes
, то это означает, что вы не можете получить доступ к каталогу.
этот код может различать, если на самом деле существует файл, и если файл делает, но пользователь не имеет доступа
enum ExistState { exist, notExist, inaccessible };
void Check(string name) {
DirectoryInfo di = new DirectoryInfo(name);
ExistState state = ExistState.exist;
if (!di.Exists) {
try {
if ((int)di.Attributes == -1) {
state = ExistState.notExist;
}
} catch (UnauthorizedAccessException) {
state = ExistState.inaccessible;
}
}
Console.WriteLine("{0} {1}", name, state);
}
объяснения от источника
« Свойство DirectoryInfo.Attributes неправильно документировано и не вызывает исключения FileNotFound или DirectoryNotFound, но вместо этого возвращает значение ошибки из базовой функции api win, которая равна 0xFFFFFFFF или -1.
Если путь существует, но доступ запрещен, попытка получить атрибуты вызовет исключение.
Если путь не существует, то атрибуты будут -1.»
- 1. GVM использует скрытый каталог
- 2. C# надежный MouseMove (hop)
- 3. npm всегда использует домашний каталог как текущий рабочий каталог
- 4. Изменить каталог Python SimpleHTTPServer использует
- 5. PHP: Удалить каталог и содержимое - самый безопасный, самый надежный метод
- 6. Использует ли FB JavaScript SDK самый надежный вариант?
- 7. C# Каталог, содержащий массивный каталог
- 8. Использует enum для целых операций с битовым ориентированием в C++, надежный/безопасный?
- 9. Измените каталог, который требует() использует в узле
- 10. Oozie Workflow использует неправильный каталог пользователя
- 11. XAMPP определяет рабочий каталог и использует его
- 12. Artifactory не использует указанный домашний каталог
- 13. R Ядро в Jupyter использует неправильный каталог
- 14. Tomcat использует каталог проектов для относительных путей
- 15. C# Выбрать каталог, каталог по умолчанию
- 16. C++ самый надежный способ скопировать файл
- 17. Как реализовать надежный метод усечения в C#?
- 18. Самый надежный способ запуска Javascript в C#?
- 19. Как реализовать надежный мониторинг потоков в C#?
- 20. Надежный PHP-метод?
- 21. Bitbucket надежный?
- 22. Надежный UDP
- 23. Надежный менеджер каталогов в PHP
- 24. Надежный регистрационный журнал Heroku
- 25. Is AsParallel(). ForAll надежный
- 26. Надежный UDP Реализация
- 27. Надежный контур Linearity Mesurment
- 28. Скрипт Powershell использует домашний каталог пользователя как текущий рабочий каталог при использовании .NET ZipFile.CreateFromDirectory. Как исправить?
- 29. Действительно ли java.net.Socket.setSoTimeout надежный?
- 30. Oracle: План выполнения: надежный?
Я не думаю, что это правда, что' DirectoryInfo' конструктор генерирует исключения для путей, которые не существуют, или для которых вы не» у меня есть доступ. По крайней мере, это не было в результате быстрого теста, который я только что побежал. О, но теперь я вижу, что вы говорили о действительно недействительном пути, а не о том, что его не существует. для OP? – adv12
@ adv12 Проверьте ссылку на документацию MSDN. Вам все равно нужно проверить, существует ли она, как я уже упоминал. – juharr
О, я вижу, что OP хочет поймать ошибки, такие как «путь слишком длинный», этим конструктором. – adv12