#c# #logging #console
#c# #ведение журнала #консоль
Вопрос:
У меня есть небольшое консольное приложение, которое принимает параметры. Через я использую метод для ввода некоторой информации в файл в виде журнала. Очень просто:
static void Log(string str)
{
using (StreamWriter sw = new StreamWriter("log.txt", true))
{
sw.WriteLine(str);
}
}
Однако, когда эта программа запускается с помощью вызова из командной строки, программа запускается, но файл журнала не изменяется.
Если приложение запускается путем запуска через проводник или отладки в Visual Studio, ведение журнала работает.
Есть идеи?
Комментарии:
1. Вероятно, проблема с разрешениями.
2. Вы запускались от имени администратора?
3. Вероятно, он записывает файл, но не в ту папку. Что произойдет, если вы используете абсолютный путь?
Ответ №1:
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);
}
Комментарии:
1. Полагаю, мне следовало подумать об этом, просто чтобы исключить возможность устранения неполадок. Но я не вижу, как ‘c:appbindebuglog.txt «нет проблемы, из-за которой приложение, запущенное из каталога отладки, не может выполнить запись в «log.txt ‘.
2. Но это все рассортировало, спасибо за объяснение и пример кода, мне действительно нужно использовать path.combine вместо явной строки. Еще раз спасибо — отмечено как ответ за подробный ответ и пример кода.
Ответ №2:
Попробуйте определить полный путь записи, например: C:UsersuserDocumentslog.txt