Почему доступ к пути запрещен? - PullRequest
135 голосов
/ 11 января 2012

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

if (result == "Success")
{
     if (FileUpload.HasFile)
     {
         try
         {
              File.Delete(Request.PhysicalApplicationPath + app_settings.login_images + txtUploadStatus.Text);
              string filename = Path.GetFileName(btnFileUpload.FileName);
              btnFileUpload.SaveAs(Request.PhysicalApplicationPath + app_settings.login_images + filename);
         }
         catch (Exception ex)
         {
               Message(ex.ToString());
         }
      }
}

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

Полное сообщение об исключении:

System.UnauthorizedAccessException: доступ к пути 'C: \ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ \temp_loginimages \ enviromental.jpg 'запрещено.в System.IO .__ Error.WinIOError (Int32 errorCode, String MaybeFullPath) в System.IO.File.Delete (String path) в гибридномДокументы \ Visual Studio 2008 \ Проекты \ hybrid \ hybrid \ User_Controls \ Imgloader_Add_Edit_Tbl.ascx.cs: строка 242

Есть идеи?

Ответы [ 26 ]

167 голосов
/ 17 июля 2012

У меня тоже была проблема, поэтому я споткнулся в этом посте.Я добавил следующую строку кода до и после копирования / удаления.

Удалить

File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);

Копировать

File.Copy(file, dest, true);
File.SetAttributes(dest, FileAttributes.Normal);
143 голосов
/ 17 июля 2014

По методу File.Delete ...

UnauthorizedAccessException означает одну из 4 вещей:

  • Звонящий не имеет необходимого разрешения.
  • Файл является исполняемым файлом, который используется.
  • Путь - это каталог.
  • Путь, указанный в файле только для чтения.
25 голосов
/ 11 декабря 2013

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

string uploadPath = Server.MapPath("~/uploads");
file.SaveAs(uploadPath); // BAD
file.SaveAs(Path.Combine(uploadPath, file.FileName)); // GOOD
17 голосов
/ 11 января 2012

Когда пользователь пытается подключиться к вашему веб-сайту, IIS назначает подключение учетной записи IUSER_ComputerName , где ComputerName - это имя сервера, на котором работает IIS. По умолчанию учетная запись IUSER_ComputerName является членом группы «Гости». Эта группа имеет ограничения безопасности. Попробуйте получить общий доступ к IUSER_ComputerName к этой папке

Здесь очень хорошо описан ответ о безопасности IIS

Надеюсь, это поможет

10 голосов
/ 26 апреля 2016

Я получил ошибку, потому что я не понимал, что местом назначения должен быть файл.У меня была папка как второй параметр (который работает в cmd).и я получил Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied., потому что C # File.Move хочет, чтобы там был файл, не только для первого параметра, но и для второго, и поэтому, если вы помещаете каталог в качестве второго параметра, он пытается записать файл, подобный c:\crpесли у вас есть каталог с именем c:\crp.

, это будет неверно File.Move(args[0],"c:\\crp");

Итак, это будет правильно File.Move(args[0],"c:\\crp\\a.a");

То же самое относится и к File.Copy

8 голосов
/ 24 февраля 2016

Щелкните правой кнопкой мыши Visual Studio и выберите Запуск от имени администратора

6 голосов
/ 21 августа 2014

Если это веб-сайт IIS, в котором возникла проблема, проверьте свойство Identity дополнительных настроек для пула приложений, который использует сайт или приложение.Вы можете обнаружить, что для него установлено значение ApplicationPoolIdentity, и в этом случае именно этот пользователь должен будет иметь доступ к пути.

Или вы можете использовать старый стиль и просто установить Identity для Network Serviceи предоставить пользователю сетевой службы доступ к пути.

3 голосов
/ 29 июня 2012

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

Я столкнулся с тем же.Убедитесь, что файл НЕ скрыт.

3 голосов
/ 11 января 2012

Вам необходимо изменить привилегии папки, которую вы пытаетесь удалить из / сохранить в. Щелкните правой кнопкой мыши на папке и используйте вкладку «Безопасность», чтобы разрешить изменять права для пользователя, под которым запускается ваше приложение.

2 голосов
/ 16 ноября 2018

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

, поэтому убедитесь, что в пути, укажите путь + имя файла

System.IO.File.WriteAllBytes("path", bytearray);
...