У меня есть несколько файлов с тем же именем, но с разными датами.
В основном мы находим файлы с самыми последними датами
Шаблоны файлов:
<FileNames><YYYYMMDD><FileExtension>
e.g. test_20100506.xls indicates
<FileNames> = test_
<YYYYMMDD> = 20100506
<FileExtension> = .xls
Теперь в исходной папке файлы
standardization_20100503.xls,
standardization_20100504.xls,
standardization_20100305.xls,
replacement_20100505.xls
Как видно, standardization_.xls имеют 3 числа, но
Замена_.xls только 1.
На выходе будет список имен файлов, содержимое которых будет
стандартизация_20100504.xls и замена_20100505.xls
Потому что среди всех стандартизация_.xls - самая последняя, и замена_.xls также одинакова.
Я пытался по собственной логике, но как-то не получилось.
Моя идея как под
private static void GetLatestFiles(ref List<FileInfo> validFiles)
{
List<FileInfo> validFilesTemp = new List<FileInfo>();
for (int i = 0; i < validFiles.Count; i++)
{
for (int j = i+1; j < validFiles.Count; j++)
{
string getFileTextX = ExtractText(validFiles[i].Name);
string getFileTextY = ExtractText(validFiles[j].Name);
if (getFileTextX == getFileTextY)
{
int getFileDatesX = Convert.ToInt32(ExtractNumbers(validFiles[i].Name));
int getFileDatesY = Convert.ToInt32(ExtractNumbers(validFiles[j].Name));
if (getFileDatesX > getFileDatesY)
{
validFilesTemp.Add(validFiles[i]);
}
else
{
validFilesTemp.Add(validFiles[j]);
}
}
}
}
validFiles.Clear();
validFiles = validFilesTemp;
}
Экстрактные номера:
public static string ExtractNumbers(string expr)
{
return string.Join(null, System.Text.RegularExpressions.Regex.Split(expr, "[^\\d]"));
}
и ExtractText -
public static string ExtractText(string expr)
{
return string.Join(null, System.Text.RegularExpressions.Regex.Split(expr, "[\\d]"));
}
Я использую c # 3.0 и framework 3.5