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" />