Трудность записи текста в новый файл в C#, ошибка корневого пути, отказано в доступе
Я пытаюсь записать текст в файл в своем проекте visual studio. Если файл не существует, я хочу создать его в проекте.
Когда я пытаюсь реализовать метод, который записывает текст в новый файл, возникает следующая ошибка:
Детали Исключения: Система.UnauthorizedAccessException: доступ к путь 'C:WindowsSysWOW64inetsrvErrorLog-это отрицается.
Видя, как будто корневой путь будет отличаться на каждом компьютере, где программа установлен, как я могу гарантировать, что этот метод может / создаст новый текстовый файл в проекте пользователя? (не зная корневой URL).
Метод, который при вызове должен записывать текст в файл.
/// <summary>
/// Logs a message to a file.
/// </summary>
/// <param name="msg">
/// The message.
/// </param>
public void LogMessageToFile(string message)
{
TextWriter tw = new StreamWriter("ErrorLog");
tw.WriteLine(message);
tw.Close();
}
Любая помощь будет чрезвычайно признательна!
Заранее благодарю вас
1 ответ:
Если это веб-проект (ASP.NET) затем вы должны записать файл журнала в стандартные папки при условии, что они существуют в корневой папке сайта. По умолчанию вы не можете писать вне корневой папки по соображениям безопасности
public void LogMessageToFile(string message) { // Get the physical path corresponding to the root folder of your site plus APP_DATA string appData = Server.MapPath("~/APP_DATA"); // Create the log file name string logFile = Path.Combine(appData, "ErrorLog.txt"); // Append to the log file and close/dispose the stream using(StreamWriter aw = new StreamWriter(logFile, true)) { sw.WriteLine(message); } }
Папка APP_DATA в корневой папке используется, когда коду требуются права на чтение/запись (файлы баз данных, файлы журналов и другие файлы данных).
Обратите внимание также, что StreamWriter должен быть заключен в оператор using для обеспечения правильное закрытие в случае возникновения исключения или других проблем с записью.