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

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

Access to the path 'C:inetpubwwwrootmysiteimagessavehere' 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 но все еще получаю это исключение. Я попытался дать доступ через explorer и через диспетчер IIS, все равно не повезло

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

спасибо

18 ответов


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


доступ к пути 'C:\inetpub\wwwroot\mysite\images\savehere-отказано! .. --2-->

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

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

вам нужно использовать имя типа 'C:\inetpub\wwwroot\mysite\images\savehere\mumble - ... в JPG'. Считать путь.Combine () для надежного создания имени пути.


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

вот полное сообщение об ошибке:

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

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

enter image description here

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


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

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


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

Код

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

Код

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

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


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

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

\MyNetworkServer\c$\SomeDirectoryOrOther


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

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

пожалуйста, добавьте разрешение iis_iusers full control в свою папку. этот параметр находится на вкладке Безопасность в свойствах папки. find this option and user in this image


Я решил с помощью этой настройки:

IIS > пулы приложений > [ваш сайт] > Дополнительные параметры... > Identity > встроенный accound > LocalSystem


моя проблема была что-то вроде этого:

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

но вместо использования пути я должен использовать файл.Полное имя... Я не знаю, поможет ли это кому-то еще, просто передавая свой собственный опыт с этой ошибкой!


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

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


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


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


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

после нескольких безуспешных iisreset призывы, я исправил эту ситуацию перезагрузка моя машина.

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


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

Я добавил правило, чтобы разрешить анонимным пользователям.

.NET Authorization Rules


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


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