System.UnauthorizedAccessException не было обработано

Я получаю исключение "Отказано в доступе". Как я могу это исправить?

Вот исключение:

Исключение System.UnauthorizedAccessException не обработано. HResult=-2147024891 Сообщение = Доступ к пути "c:\message.txt" запрещен.
Источник =mscorlib

Вот код:

    public static void WriteToFile(string s)
    {
        fs = new FileStream("c:\\message.txt",
        FileMode.Append, FileAccess.Write);
        sw = new StreamWriter(fs);
        sw.WriteLine(s);
        sw.Flush();
        sw.Close();
        fs.Close();
    }

РЕДАКТИРОВАТЬ: Это работает, если я запускаю vs2012 как администратор, но есть ли способ или причина, чтобы сделать это как обычный пользователь?

И это работает:

    public static void WriteToFile(string s)
    {
        fs = new FileStream(@"C:\Users\KristjanBEstur\Documents\message.txt",
        FileMode.Append, FileAccess.Write);
        sw = new StreamWriter(fs);
        sw.WriteLine(s);
        sw.Flush();
        sw.Close();
        fs.Close();
        File.Delete(@"C:\Users\KristjanBEstur\Documents\message.txt");
    }

5 ответов

Решение

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

Вы можете сделать это, добавив это в манифест приложения.

<requestedExecutionLevel level="requireAdministrator" uiAccess="true"/>

Двойной клик по app.manifest файл и если app.manifest отсутствует Щелкните правой кнопкой мыши по вашему проекту, добавьте -> Новый элемент -> Файл манифеста приложения и замените эту строку

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

с этим

<requestedExecutionLevel level="requireAdministrator" uiAccess="true" />

Он запустит ваше приложение с правами администратора.

Я не уверен, что именно все могут бросить UnauthorizedAccessException,

Хотя одна идея... вы пытаетесь создать файл прямо в c: диск, который иногда запрещен системной политикой. Для устранения неполадок попробуйте создать файл в другом месте, к которому у вас будет доступ, например My Documents,

Вам нужно установить FileAtrributes собственность File в Normal до доступа к файлу.

Попробуй это:

public static void WriteToFile(string s)
    {
        String path=@"c:\message.txt";
        if(File.Exists(path))
        {
        File.SetAttributes(path, FileAttributes.Normal);
        fs = new FileStream(path,
        FileMode.Append, FileAccess.Write);
        sw = new StreamWriter(fs);
        sw.WriteLine(s);
        sw.Flush();
        sw.Close();
        fs.Close();
        }
        else
        {
        MessageBox.Show("File not Found!");
        }
    }

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

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Другие вопросы по тегам