Почему доступ к пути запрещен?

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

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) на hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click (отправитель объекта, EventArgs e) в C:\Users\gowdyn\Документы\Visual Studio 2008\Projects\hybrid\hybrid\User_Controls\Imgloader_Add_Edit_Tbl.ascx.cs: строка 242

Любые идеи?

Ответ 1

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

Удалить

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

Копировать

File.Copy(file, dest, true);
File.SetAttributes(dest, FileAttributes.Normal);

Ответ 2

В соответствии с File.Delete Method...

An UnauthorizedAccessException означает одну из четырех вещей:

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

Ответ 3

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

string uploadPath = Server.MapPath("~/uploads");
file.SaveAs(uploadPath); // BAD
file.SaveAs(Path.Combine(uploadPath, file.FileName)); // GOOD

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

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

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

Ответ 8

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

Я поразил то же самое. Убедитесь, что файл НЕ СКРЫТ.

Ответ 9

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

Ответ 10

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

Ответ 11

У меня была такая же проблема на недавно перемещенном веб-сайте на общем сервере. Решен через панель веб-хоста (DotNetPanel), устанавливая true "разрешить права на запись". Поэтому, если вы находитесь на общем сервере, прежде чем рассматривать весь код, чтобы посмотреть на конфигурацию сервера и вы могли бы сэкономить много времени.

Ответ 12

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

Ответ 13

Проверьте свойства своих файлов. Если проверка только для чтения, снимите флажок. Это была моя личная проблема с UnauthorizedAccessException.

Ответ 14

Я столкнулся с этой ошибкой, потому что

Иногда, когда я Combine путь с именем файла и FileName = ""

Он становится Path Directory не a file, который является проблемой как упомянутой выше

поэтому вы должны проверить FileName как это

if(itemUri!="")
        File.Delete(Path.Combine(RemoteDirectoryPath, itemUri));

Ответ 15

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

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

Ответ 16

У меня была точная ошибка при удалении файла. Это была служба Windows, работающая под учетной записью службы, которая не смогла удалить документ .pdf из общей папки, хотя у нее был полный контроль над папкой.

Что мне помогло, так это переход на вкладку "Безопасность" в "Общая папка"> "Дополнительно"> "Поделиться"> "Добавить".

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

Ответ 17

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

System.UnauthorizedAccessException: Access to the path "C:\\Order\\Media
44aa4857-3bac-4a18-a307-820450361662.mp4" is denied.

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

enter image description here

Так что в моем случае это был сетевой сервис

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

Для получения дополнительной информации, пожалуйста, проверьте скриншот ниже

enter image description here

Ответ 18

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

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

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

Ответ 19

Я тоже столкнулся с такой же проблемой при попытке сделать это после развертывания на сервере:

dirPath = Server.MapPath(".") + "\\website\\" + strUserName;
if (!Directory.Exists(dirPath))
{
    DirectoryInfo DI = Directory.CreateDirectory(dirPath);
}
string filePath = Server.MapPath(".") + "\\Website\\default.aspx";
File.Copy(filePath, dirPath + "\\default.aspx", true);
File.SetAttributes(dirPath + "\\default.aspx", FileAttributes.Normal);

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

Ответ 20

Я обнаружил, что эта ошибка может возникать в режиме DESIGN MODE, а не в? режим выполнения... Если вы делаете что-то вроде создания члена класса, для которого требуется доступ к файлу .INI или .HTM(файл конфигурации, файл справки), вы можете НЕ инициализировать элемент в объявлении, но инициализировать его позже в FORM_Load() и т.д.... Когда вы выполняете инициализацию... Используйте инструкцию охранника IF:

    /// <summary>FORM: BasicApp - Load</summary>
    private void BasicApp_Load(object sender, EventArgs e)
    {
        // Setup Main Form Caption with App Name and Config Control Info
        if (!DesignMode)
        {
            m_Globals = new Globals();
            Text = TGG.GetApplicationConfigInfo();
        }
    }

Это заставит MSVS Designer пытаться создать INI или HTM файл, когда вы находитесь в режиме разработки.

Ответ 21

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

Простой System.Threading.Thread.Sleep(500); решил:

void RenameFile(string from, string to)
{
   try
   {   
      System.IO.File.Move(from, to)      
   }   
   catch 
   {  
       System.Threading.Thread.Sleep(500);      
       RenameFile(from, to);      
   }   
}

Ответ 22

В моем конкретном случае я неоднократно создавал и удалял 10000 папок. Мне кажется, что проблема была в том, что, хотя метод Directory.Delete(path, true) возвращает, механизм ОС, лежащий в основе, может все еще удалять файлы с диска. И когда я начинаю создавать новые папки сразу после удаления старых, некоторые из них все еще заблокированы, потому что они еще не полностью удалены. И я получаю System.UnauthorizedAccessException: "Доступ к пути запрещен".

enter image description here

Использование Thread.Sleep(5000) после того, как Directory.Delete(path, true) решит эту проблему. Я абсолютно согласен с тем, что это небезопасно, и я никого не поощряю к его использованию. Я хотел бы, чтобы здесь был лучший подход к решению этой проблемы, чтобы улучшить мой ответ. Сейчас я просто даю идею, почему это исключение может произойти.

class Program
{
    private static int numFolders = 10000;
    private static string rootDirectory = "C:\\1";

    static void Main(string[] args)
    {
        if (Directory.Exists(rootDirectory))
        {
            Directory.Delete(rootDirectory, true);
            Thread.Sleep(5000);
        }

        Stopwatch sw = Stopwatch.StartNew();
        CreateFolder();
        long time = sw.ElapsedMilliseconds;

        Console.WriteLine(time);
        Console.ReadLine();
    }

    private static void CreateFolder()
    {
        var one = Directory.CreateDirectory(rootDirectory);

        for (int i = 1; i <= numFolders; i++)
        {
            one.CreateSubdirectory(i.ToString());
        }
    }
}

Ответ 23

Сначала просто проверьте путь, если двоеточие (:) отсутствует или отсутствует после буквы диска. Если двоеточие не пропущено, вы можете проверить, предоставлены ли права доступа/записи для этого пути. У меня была та же самая проблема, и я только пропускал двоеточие, разрешение и все остальное было хорошо.

C:\folderpath

будет работать нормально, но,

C\folderpath .........(missing colon)

выдаст вам ошибку отказа в доступе.

Ответ 24

Я пытался использовать System.IO.File.OpenWrite (путь)

и это не сработало, потому что я только передавал OpenWrite() путь к каталогу, но он требует путь до файла, который вы хотите записать. Таким образом, полный путь, включая filename.extension в конце, должен быть передан в OpenWrite, чтобы избежать UnauthorizedAccessException

Ответ 25

Для тех, кто пытается создать приложение UWP (Universal Windows), права доступа к файлам намного более ограничены и, по умолчанию, вообще запрещены. Он также заменяет разрешения пользователя системы. Вы будете в основном иметь доступ только к файлам в любом из

  • Ваше место установки
  • Ваше местоположение AppData
  • Файлы, выбранные с помощью средства выбора файлов или папок
  • Запрошенные местоположения в вашем манифесте приложения

Подробнее можно прочитать здесь => https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions

Ответ 26

Если вы используете BitDefender, есть вероятность, что его функция Safe Files заблокировала вашу работу. Это форма защиты от вымогателей, которая поставляется с некоторыми из более продвинутых версий.

Обязательно предоставьте доступ к вашему приложению в BitDefender и повторите попытку.

Некоторые подробности можно найти на этой странице поддержки BitDefender.