private static void ArchiveFile(FileConfiguration configuration, string filePath)
{
string archiveFilePath = GetArchiveFileName(configuration, filePath);
if (!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(archiveFilePath))))
{
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(archiveFilePath)));
}
if (configuration.ArchiveNumbering == ArchiveNumberingOptions.Sequence)
{
var filesMatchDescription = System.IO.Directory.GetFiles(System.IO.Path.GetDirectoryName(System.IO.Path.GetFullPath(archiveFilePath)),
System.IO.Path.GetFileNameWithoutExtension(archiveFilePath) + ".*" + System.IO.Path.GetExtension(archiveFilePath));
int maxIndexFound = 0;
foreach (var currFile in filesMatchDescription)
{
var start = System.IO.Path.GetFileNameWithoutExtension(archiveFilePath).Length + 1;
var legnth = System.IO.Path.GetFileName(currFile).Length - start - System.IO.Path.GetExtension(archiveFilePath).Length;
var sequenceString = System.IO.Path.GetFileName(currFile).Substring(System.IO.Path.GetFileNameWithoutExtension(archiveFilePath).Length + 1, legnth);
int sequenceNumber;
if (int.TryParse(sequenceString, out sequenceNumber))
{
if (sequenceNumber > maxIndexFound)
{
maxIndexFound = sequenceNumber;
}
}
}
// The file now archived.
System.IO.File.Move(filePath, System.IO.Path.Combine(System.IO.Path.GetDirectoryName(archiveFilePath), System.IO.Path.GetFileNameWithoutExtension(archiveFilePath)) + "." + (maxIndexFound + 1) + System.IO.Path.GetExtension(archiveFilePath));
}
}