Сохранение пути к файлу в качестве переменной для консольного приложения C # - PullRequest
0 голосов
/ 23 марта 2009

Я пытаюсь создать консольное приложение C #, которое будет генерировать файл журнала. Я хотел бы иметь некоторую гибкость с тем, где файл журнала будет храниться.

Я пытался использовать файл Settings.settings с:

Имя: logDrive Тип: строка Область применения: применение Значение: C: \ Scripts \ Logs

В моем коде я использую:

string logFile = DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString();
logFile = logFile.Replace(@"/", @"-").Replace(@"\", @"-") + ".log";
string logDrive = Properties.Settings.Default.logDrive;
StreamWriter output = new StreamWriter(logDrive + logFile);

При компиляции выше, я получаю сообщение об ошибке «Формат данного пути не поддерживается.»

Если это поможет, значения для:

logDrive = "C: \ Scripts \ ServiceDesk \ Logs" logFile = "23-23-2009 13:20 PM.log"

Есть ли у кого-нибудь мысли / рекомендации для лучшего подхода и / или что я делаю неправильно?

Ответы [ 2 ]

13 голосов
/ 23 марта 2009

Вы не можете включить : в имя файла. Лучшим подходом может быть использование формата вроде

YYYYMMDD_HHMMSS.log

(например, 20090323_231245.log)

Преимущество заключается в том, что он легко сортируется и не использует недопустимых символов.

Вы можете получить это, используя

string logFile = string.Format("{0:yyyyMMdd_HHmmss}.log", DateTime.Now);

Примечания:

Также, как предлагается в комментариях, вы должны рассмотреть возможность использования Path.Combine для объединения вашего каталога и имени файла. Это поможет уменьшить проблемы с конечными разделителями путей и т. Д.

0 голосов
/ 23 марта 2009

Вам также нужно добавить косую черту в ваш logDrive. То есть:

logDrive = "C:\Scripts\ServiceDesk\Logs\"

.. или используйте Path.Combine, как предложено в другом ответе

...