Как я могу изменить расположение файла программно?

Для копирования без EOF используют режим двоичного счета:

copy /B *.js compiled.js /Y

, Если получающийся файл все еще имеет EOFs, который, возможно, прибыл из одного из исходных файлов, он может быть зафиксирован этим вариантом:

copy /A *.js compiled.js /B /Y

А удаляет запаздывание EOFs из исходных файлов, если кто-либо и/B предотвращают добавление EOF в получающийся файл. Если EOF не будет в конце, исходный файл будет усеченным в нем. Порядок переключателей важен. Если Вы запишете

copy /A *.js /B compiled.js /Y  

- то EOFs в исходных файлах не будет удален, но все еще заканчивающийся, EOF не будет добавлен.

Попытка это самостоятельно, это - то, где я получаю его. Команды DOS являются странными.

71
задан Timo 25 November 2013 в 22:12
поделиться

2 ответа

log4net может сделать это за вас. Любое свойство appender типа string может быть отформатировано, в этом случае с помощью обработчика опции log4net.Util.PatternString . PatternString даже поддерживает перечисление SpecialFolder , которое обеспечивает следующую элегантную конфигурацию:

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file type="log4net.Util.PatternString" 
        value="%envFolderPath{CommonApplicationData}\\test.txt" />
    ...
</appender>

Вот модульный тест, который проверяет пудинг:

[Test]
public void Load()
{
    XmlConfigurator.Configure();
    var fileAppender = LogManager.GetRepository()
        .GetAppenders().First(appender => appender is RollingFileAppender);

    var expectedFile = 
        Path.Combine(
            Environment.GetFolderPath(
                Environment.SpecialFolder.CommonApplicationData),
                "test.txt");

    Assert.That(fileAppender, 
        Is.Not.Null & Has.Property("File").EqualTo(expectedFile));
}

Следующий тест проверяет, что log4net действительно записывает на диск (что в основном делает это "интеграционный" тест, а не модульный тест, но мы пока оставим это):

[Test]
public void Log4net_WritesToDisk()
{
    var expectedFile = 
        Path.Combine(
            Environment.GetFolderPath(
                Environment.SpecialFolder.CommonApplicationData),
                "test.txt");

    if (File.Exists(expectedFile))
        File.Delete(expectedFile);

    XmlConfigurator.Configure();

    var log = LogManager.GetLogger(typeof (ConfigTest));
    log.Info("Message from test");

    LogManager.Shutdown();

    Assert.That(File.ReadAllText(expectedFile), 
        Text.Contains("Message from test"));
}

NB: Я настоятельно рекомендую использовать компактный синтаксис свойств, продемонстрированный в приведенном выше примере. Удаление всех этих "

86
ответ дан 24 November 2019 в 12:57
поделиться

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

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

0
ответ дан 24 November 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: