Member 12969219 Ответов: 3

Как я могу получить текущую дату, как моя ценность в приложение.конфиг


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

Используя "StreamWriter", я хочу создать список этих файлов и поместить его в текстовый документ. Название текстового документа будет сегодняшней датой.

Как я могу добавить этот код в файл App.Config на языке C#?
"e:\\testdata\\" + dateStr + ".txt"


"DateStr" ссылается на строковое значение, объявленное следующим образом.

DateTime currentDateTime = DateTime.Now;
     string dateStr = currentDateTime.ToString("yyyy-MM-dd");


Если я помещу этот код на главную страницу, все будет работать нормально. Но когда я пытаюсь вызвать имя файла и пункт назначения (в данном случае пункт назначения - "testdata", а имя файла-сегодняшняя дата) с помощью "configuration manager" в файле App.Config, он создает файл, и данные внутри него верны, но он называет файл "+dateStr+" вместо того, чтобы дать ему сегодняшнюю дату.

Любые предложения о том, как получить это в файле App.Config, будут очень признательны.

Что я уже пробовал:

Я попытался использовать метод \ escape, чтобы избежать дополнительных кавычек, но это не сработало.
Я также попытался удалить некоторые кавычки, и это не сработало.
Я думал, что смогу добавить строку "dateStr" на страницу App.Config, но я не могу заставить ее работать.

Вот код, который я попытался поместить в свой файл App.Config:
<add key="rslt" value="e:\\testdata\\  + dateStr +  .txt"/>

3 Ответов

Рейтинг:
12

F-ES Sitecore

Это не работает, потому что все, что читается из конфигурационного файла, рассматривается буквально как строка;

<add key="rslt" value="e:\\testdata\\  + dateStr +  .txt"/>


В этой "строке" нет ничего, что говорит о том, что dateStr должен быть заменен значением переменной, которую вы назвали dateStr. Откуда .net знает, что это то, что вы хотите сделать?

Лучший способ справиться с этим-поместить маркер в строку, которая затем заменяется вашими фактическими значениями в коде. Так что если вы обновите конфигурацию, чтобы иметь

<add key="rslt" value="e:\\testdata\\{0}.txt"/>


В своем коде вы можете использовать строку.Формат для замены {0} содержимым переменной

string filename = string.Format(textFromConfig, dateStr);


Формат заменит {0} первым параметром (dateStr), {1} вторым параметром (у вас его нет) и так далее.


Member 12969219

Спасибо, что помогли мне с этим. Я не думал использовать {0} в этой ситуации.

Рейтинг:
1

Member 12969219

Так почему же это было бы плохо, чтобы поместить его в файл App.Config? (любопытный)

Единственная причина, по которой я хотел поместить в файл App.Config, заключается в том, что я собираюсь сделать пакетную сборку программы и запланировать ее запуск на каждый день.
Я хотел поместить это в файл App.Config, чтобы, если они изменят целевой каталог на мне, мне не пришлось бы перестраиваться, просто измените файл App.Config с помощью блокнота и сохраните изменения.

П. С. Спасибо за быстрый ответ.


#realJSOP

Дело не в том, что "это плохо", а в том, что это "невозможно". Вы просто не можете поместить код в конфигурационный файл и ожидать, что он будет запущен.

Вы можете поместить имя папки, расширение и даже строку формата в конфигурацию приложения, но вы не можете включить в нее код oput.

Рейтинг:
0

#realJSOP

Вы не должны делать этого в файле app.config.

Попробовать это:

string filename = System.IO.Path.Combine(@"e:\testdata\", string.Format("{0}.txt", DateTime.Now.ToString("yyyyMMddhhmmss")));


или даже это:

string filename = string.Format(@"e:\testdata\{0}.txt", DateTime.Now.ToString("yyyyMMddhhmmss"));