private void ArchiveBySequence(string fileName, string pattern)
{
FileNameTemplate fileTemplate = new FileNameTemplate(Path.GetFileName(pattern));
int trailerLength = fileTemplate.Template.Length - fileTemplate.EndAt;
string fileNameMask = fileTemplate.ReplacePattern("*");
string dirName = Path.GetDirectoryName(Path.GetFullPath(pattern));
int nextNumber = -1;
int minNumber = -1;
var number2Name = new Dictionary<int, string>();
try
{
#if SILVERLIGHT && !WINDOWS_PHONE
foreach (string s in Directory.EnumerateFiles(dirName, fileNameMask))
#else
foreach (string s in Directory.GetFiles(dirName, fileNameMask))
#endif
{
string baseName = Path.GetFileName(s);
string number = baseName.Substring(fileTemplate.BeginAt, baseName.Length - trailerLength - fileTemplate.BeginAt);
int num;
try
{
num = Convert.ToInt32(number, CultureInfo.InvariantCulture);
}
catch (FormatException)
{
continue;
}
nextNumber = Math.Max(nextNumber, num);
minNumber = minNumber != -1 ? Math.Min(minNumber, num) : num;
number2Name[num] = s;
}
nextNumber++;
}
catch (DirectoryNotFoundException)
{
Directory.CreateDirectory(dirName);
nextNumber = 0;
}
if (minNumber != -1 && ShouldDeleteOldArchives())
{
int minNumberToKeep = nextNumber - this.MaxArchiveFiles + 1;
for (int i = minNumber; i < minNumberToKeep; ++i)
{
string s;
if (number2Name.TryGetValue(i, out s))
{
if (!DeleteOldArchiveFile(s))
break;
}
}
}
string newFileName = ReplaceNumberPattern(pattern, nextNumber);
ArchiveFile(fileName, newFileName);
}