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


Я знаю этот вопрос задавали много раз здесь, но я не могу найти решение моей проблемы. Я пытаюсь сохранить изображение в папку в .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 но все равно получаю это исключение. Я попытался дать доступ через проводник и через диспетчер IIS, все равно не повезло

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

спасибо

18 124

18 ответов:

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

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

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

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

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

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

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

{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

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

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

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

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

\MyNetworkServer\SomeDirectoryOrOther

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

fileUpload.SaveAs(networkFilename);

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

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

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

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

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

Я решил с этой настройкой:

IIS > пулы приложений > [ваш сайт] > Дополнительные параметры... > Личность > встроенный фактор > запись

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

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

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

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

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

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

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

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

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

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

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

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

.NET Authorization Rules

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

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