Подтвердить что ты не робот

Directory.Exists не работает для сетевого пути

У меня есть строка проверки кода, если каталог существует, а затем получает список файлов в нем.

System.IO.Directory.Exists(@"\\Server\Folder\");

Я работаю, когда тестирую его (запускаюсь из visual studio), но когда я развертываю веб-сайт, он всегда возвращает false.

Я делаю то же подтверждение для другой папки, на другом сервере (скажем, Server2), и он отлично работает.

Затем я подумал, что это проблема с доступом, но общая папка и сеть имеют доступ ко всем... Есть ли еще одна причина, почему это не сработает?

4b9b3361

Ответ 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%, что исправила проблему с разрешениями, но она начала работать сразу после внесения изменений.