Доступ к пути запрещен

Я знаю, что этот вопрос задавали много раз здесь, но я не могу найти решение моей проблемы. Я пытаюсь сохранить изображение в папку в .net С#, но получить это исключение:

Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.The error occured at mscorlib because    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode)

Я дал полный контроль над этой папкой (savehere) до network service и iis_iusrs, даже дал полный контроль над everyone, но все еще получал это исключение. Я попытался предоставить доступ через проводник и через диспетчера IIS, все еще не повезло

Я делаю это на Windows Server 2008 R2 и IIS 7.5, Кому мне нужно предоставить доступ?

Спасибо

Ответ 1

Вам нужно узнать из пула приложений для веб-сайта, в каком идентификаторе он работает (по умолчанию это Application Pool Identity) и предоставить правильные разрешения.

Ответ 2

Доступ к пути 'C:\inetpub\wwwroot\mysite\images\savehere' запрещен

Внимательно прочитайте сообщение. Вы пытаетесь сохранить файл, имя которого совпадает с именем каталога. Это не может работать, вы не можете перезаписать каталог, заполненный файлами, одним новым файлом. Это может привести к неустранимой потере данных: "Доступ к пути запрещен" - это файловая система, борющаяся за предотвращение этого.

Сообщение об исключении не является идеальным, но оно пришло прямо из ОС и было отлито из камня. Платформа часто добавляет дополнительные проверки для создания более качественных сообщений, но это дорогостоящий тест в сети. Перф это тоже особенность.

Вам нужно использовать имя типа "C:\inetpub\wwwroot\mysite\images\savehere\mumble.jpg". Рассмотрим Path.Combine(), чтобы надежно сгенерировать имя пути.

Ответ 3

У меня была такая же проблема при попытке создать файл на сервере (фактически файл, являющийся копией из шаблона).

Здесь отображается полное сообщение об ошибке:

{ERROR} 08/07/2012 22:15:58 - System.UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\SAvE\Templates\Cover.pdf' is denied.

Я добавил новую папку под названием Templates в папку приложения IIS. Одна очень важная вещь в моем случае заключается в том, что мне нужно было предоставить разрешение Write (Gravar) для пользователя IUSR в этой папке. Вам также может потребоваться предоставить Network Service и ASP.NET v$.# одно и то же разрешение на запись.

enter image description here

После этого все работает так, как ожидалось.

Ответ 4

У меня была точно такая же проблема.

Решением было то, что файл, который я пытался получить, был readonly, поскольку он был скопирован из файла шаблона, который был только для чтения.

< facepalm/ >

Ответ 5

У меня возникла эта проблема, когда я пытаюсь сохранить файл без указания имени файла.

Старый код

File.WriteAllBytes(@"E:\Folder", Convert.FromBase64String(Base64String));

Рабочий код

File.WriteAllBytes(@"E:\Folder\"+ fileName, Convert.FromBase64String(Base64String));

Ответ 6

Моя проблема заключалась в том, что я должен был запрашивать только доступ для чтения:

FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read);

Ответ 7

пожалуйста, добавьте IIS_IUSERS разрешение на полный доступ к вашей папке. Вы найдете эту опцию на вкладке безопасности в свойствах папки. find this option and user in this image

Ответ 8

Какая идентификация - это ваш пул приложений для веб-приложения, выполняющегося как, для устранения неполадок, попробуйте создать новый пул приложений, например, сообщите Network Service как свою личность и сделайте, чтобы ваше веб-приложение использовало этот новый пул приложений, который вы создали, и посмотрите, сохраняется ли ошибка,

Ответ 9

Следующий совет не является ответом на этот вопрос, но может помочь другим пользователям, которые попадают на эту веб-страницу, после того, как я сделал ту же самую глупую ошибку, которую я только что сделал...

Я пытался получить элемент управления ASP.Net FileUpload для загрузки этого файла на сетевой адрес, содержащий "скрытую долю", а именно:

\MyNetworkServer\с $\ SomeDirectoryOrOther

Я этого не понимал. Если я запустил веб-страницу в режиме отладки в Visual Studio, все будет хорошо. Но когда проект был развернут и запущен через пользователя пула приложений, он отказался найти этот сетевой каталог.

Я проверил, какой пользователь мой сайт IIS работает, дал этому пользователю полные разрешения для этого каталога на сервере MyNetworkServer и т.д. и т.д., но ничего не получилось.

Причина (конечно!) заключается в том, что только "Администраторы" могут "видеть" эти скрытые диски.

Моим решением было просто создать "нормальный" ресурс для

\MyNetworkServer\SomeDirectoryOrOther

и это избавилось от ошибки "Доступ к пути... отрицается". FileUpload смог успешно выполнить команду

fileUpload.SaveAs(networkFilename);

Надеюсь, это поможет некоторым другим пользователям, которые совершили ту же ошибку, что и я!

Обратите внимание, что если вы загружаете большие файлы (более 4 МБ), то IIS7 требует, чтобы вы изменили файл web.config в двух местах. Нажмите эту ссылку, чтобы прочитать, что вам нужно сделать: Загрузка больших файлов в ASP.Net

Ответ 10

I Решено с этой настройкой:

IIS > Пулы приложений > [ваш сайт] > Дополнительные настройки... > Идентификация > Встроенная поддержкa > LocalSystem

Ответ 11

Моя проблема была примерно такая:

FileStream ms = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);

но вместо использования пути я должен использовать File.FullName... Я не знаю, поможет ли это кому-либо другому, просто передав мой собственный опыт с этим erro!

Ответ 12

  • Измените настройку со встроенной учетной записи на пользовательскую учетную запись и введите имя и пароль другого сервера.

  • Сохраните настройку как встроенную (вместо классического режима).

Ответ 13

Может быть, это поможет тебе.

string tempDirectoryPath = @"C:\Users\HOPE\Desktop\Test Folder";
string zipFilePath = @"C:\Users\HOPE\Desktop\7za920.zip";
Directory.CreateDirectory(tempDirectoryPath);
ZipFile.ExtractToDirectory(zipFilePath, tempDirectoryPath);

Ответ 14

Сделать каталог Сохранить > виртуальным каталогом и предоставить разрешение на чтение/запись с панели управления

Ответ 15

Имел каталог с тем же именем, что и файл, который я пытался написать, так что люди тоже могут это учесть.

Ответ 16

Я столкнулся с этой проблемой при разработке на своей локальной рабочей станции.

После нескольких неудачных вызовов iisreset я исправил эту ситуацию с помощью перезагрузки моей машины.

В ретроспективе дескриптор открытого файла может вызвать проблемы.

Ответ 17

В моем случае мне пришлось добавить правило авторизации .NET для веб-сайта в IIS.

Я добавил правило для анонимных пользователей.

.NET Authorization Rules

Ответ 18

У меня была та же проблема, но я исправил ее, сохранив файл в другом месте, а затем скопировав файл и вставив его в то место, где я хотел. Я использовал опцию, чтобы заменить существующий файл, и это помогло мне. Я знаю, что это не самый эффективный способ, но он работает и занимает менее 15 секунд.

Ответ 19

Я наконец-то нашел ответ для 2019. Вам нужно добавить "IIS APPPOOL\DefaultAppPool" в список пользователей, которые имеют права доступа к каталогу, который нужно изменить. Убедитесь, что у них есть полные права.

Ответ 20

У меня было много проблем с этим, в частности, из-за моего кода, работающего локально, но когда мне нужно было запустить его на IIS, он выдавал эту ошибку. Я обнаружил, что добавление проверки к моему коду и разрешение приложению создавать папку при первом запуске исправило проблему, не связываясь с авторизацией папок.

как-то так, прежде чем вызывать свой метод, который использует папку

bool exists = System.IO.Directory.Exists("mypath");

        if (!exists)
            System.IO.Directory.CreateDirectory("mypath");

Ответ 21

Я создал виртуальный каталог с полным разрешением и добавил туда исходные файлы и видеофайлы ffmpeg, так что, наконец, это имело смысл, поскольку это может быть доступно любому.