Для копирования без 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 являются странными.
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: Я настоятельно рекомендую использовать компактный синтаксис свойств, продемонстрированный в приведенном выше примере. Удаление всех этих "
Вместо того, чтобы делать это программно, вы можете использовать переменные среды и настраиваемые шаблоны в файле конфигурации. См. Этот ответ на аналогичный вопрос .
Посмотрите на " Или вы можете предоставить каждому процессу отдельный файл журнала, например, включив идентификатор процесса в имя файла, используя настраиваемый шаблон.