Консольное приложение C # не записывает в файл при вызове из командной строки, но делает иначе - PullRequest
0 голосов
/ 11 марта 2019

У меня есть небольшое консольное приложение, которое принимает параметры.Я использую метод, чтобы бросить некоторую информацию в файл в виде журнала.Очень просто:

        static void Log(string str)
        {
            using (StreamWriter sw = new StreamWriter("log.txt", true))
            {
                sw.WriteLine(str);
            }
        }

Однако, когда эта программа запускается при вызове командной строки, она запускается, но файл журнала не изменяется.

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

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

new StreamWriter("log.txt", true) пишет в текущий рабочий каталог, который может быть где угодно, включая сетевые ресурсы или места, к которым у вас нет прав записи.Всегда указывайте полный путь к любым файлам.Если вы хотите записать в файл, вам нужно убедиться, что вы пишете в место, к которому у вас есть доступ.Не запускайте приложение просто как администратор, это открывает все дыры в безопасности.

Возможно, вы хотите что-то вроде:

var p = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "myAppName");
if (!Directory.Exists(p)) Directory.CreateDirectory(p);
using (var sw = new StreamWriter(Path.Combine(p, "log.txt"), true)
{
    sw.WriteLine(str);
}
0 голосов
/ 11 марта 2019

Попробуйте определить полный путь записи, например: C:\Users\user\Documents\log.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...