private void ArchiveFile(string fileName, string archiveFileName)
{
FinalizeFile(fileName, isArchiving: true);
string archiveFolderPath = Path.GetDirectoryName(archiveFileName);
if (!Directory.Exists(archiveFolderPath))
Directory.CreateDirectory(archiveFolderPath);
if (EnableArchiveFileCompression)
{
InternalLogger.Info("Archiving {0} to compressed {1}", fileName, archiveFileName);
FileCompressor.CompressFile(fileName, archiveFileName);
DeleteAndWaitForFileDelete(fileName);
}
else
{
InternalLogger.Info("Archiving {0} to {1}", fileName, archiveFileName);
if (File.Exists(archiveFileName))
{
//todo handle double footer
InternalLogger.Info("Already exists, append to {0}", archiveFileName);
//todo maybe needs a better filelock behaviour
//copy to archive file.
using (FileStream fileStream = File.Open(fileName, FileMode.Open))
using (FileStream archiveFileStream = File.Open(archiveFileName, FileMode.Append ))
{
fileStream.CopyAndSkipBom(archiveFileStream, Encoding);
//clear old content
fileStream.SetLength(0);
fileStream.Close(); // This flushes the content, too.
#if NET3_5
archiveFileStream.Flush();
#else
archiveFileStream.Flush(true);
#endif
}
}
else
{
File.Move(fileName, archiveFileName);
}
}
}