Трудность записи текста в новый файл в 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 2

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 для обеспечения правильное закрытие в случае возникновения исключения или других проблем с записью.