Directory.Exists не работает для сетевого пути
У меня есть строка проверки кода, если каталог существует, а затем получает список файлов в нем.
System.IO.Directory.Exists(@"\\Server\Folder\");
Я работаю, когда тестирую его (запускаюсь из visual studio), но когда я развертываю веб-сайт, он всегда возвращает false.
Я делаю то же подтверждение для другой папки, на другом сервере (скажем, Server2), и он отлично работает.
Затем я подумал, что это проблема с доступом, но общая папка и сеть имеют доступ ко всем... Есть ли еще одна причина, почему это не сработает?
Ответы
Ответ 1
Когда вы запускаете код в Visual Studio, он выполняется под правами вашего пользователя.
Когда вы запускаете код в IIS, он запускается с идентификатором пула приложений, который по умолчанию является встроенным пользователем "Сетевая служба", это локальная учетная запись пользователя, которая не имеет доступа за пределами локальной машины.
Права на сетевой ресурс - это первый уровень, после чего проверяются права NTFS в каталоге.
Вам нужно изменить личность пула приложений на пользователя домена с теми же правами, что и ваш пользователь.
Ответ 2
Возможно, я немного опоздал, но я обнаружил, что существует проблема с этим методом класса Directory
.
Вместо этого я использовал DirectoryInfo
с олицетворением таким образом:
new DirectoryInfo(path).Exists
Таким образом, вы избегаете всей проблемы смены идентичности, которая была отклонена нашей ИТ-областью.
Надеюсь, это поможет кому-то!
Ответ 3
Для будущих ссылок это также работает:
bool result = false;
try
{
Directory.GetAccessControl(path);
result = true;
}
catch (UnauthorizedAccessException)
{
result = true;
}
catch
{
result = false;
}
Ответ 4
Я получал эту ошибку с кодом UNC, который выглядел так:
@"\ Server01\C $\Data\подпапка"
Я сделал ясную долю и избавился от c$
и сделал это так:
@"\ Server01\TheData\подпапка"
и он начал работать.
Я не уверен на 100%, что исправила проблему с разрешениями, но она начала работать сразу после внесения изменений.