我有一些同名但日期不同的文件。基本上,我们正在查找最近日期的文件。
文件模式是
<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,但replacement_.xls只有1。
输出将是一个文件名列表,其内容将是
standardization_20100504.xls和replacement_20100505.xls
因为在所有的standardization_.xls中是最新的,而replacement_.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;
}ExtractNumbers是:
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和Framework3.5
发布于 2010-05-04 07:49:33
class Program
{
static void Main()
{
var files =
from file in Directory.GetFiles(@"c:\somedirectory")
let name = Path.GetFileNameWithoutExtension(file)
let tokens = name.Split('_')
where tokens.Length > 1
let date = DateTime.ParseExact(tokens[1], "yyyyMMdd", CultureInfo.InvariantCulture)
orderby date descending
select file;
foreach (var item in files)
{
Console.WriteLine(item);
}
}
}发布于 2010-05-04 07:33:37
使用此regex从完整文件名中获取日期。
@"_([0-9]*)\."然后,如果需要,则将其转换为DateTime
DateTime dt;
dt = new DateTime();
dt = DateTime.ParseExact(MyString, "yyyyMMdd",null);使用dt.CompareTo(dt1).Equals(1)比较日期是早的还是晚的。
https://stackoverflow.com/questions/2763526
复制相似问题