首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中获取最新文件

如何在C#中获取最新文件
EN

Stack Overflow用户
提问于 2010-05-04 07:23:56
回答 2查看 1.6K关注 0票数 0

我有一些同名但日期不同的文件。基本上,我们正在查找最近日期的文件。

文件模式是

代码语言:javascript
复制
<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也是一样的。

我尝试了自己的逻辑,但以某种方式失败了。

我的想法如下

代码语言:javascript
复制
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是:

代码语言:javascript
复制
public static string ExtractNumbers(string expr)
        {
            return string.Join(null, System.Text.RegularExpressions.Regex.Split(expr, "[^\\d]"));
        }

而ExtractText是

代码语言:javascript
复制
public static string ExtractText(string expr)
        {
            return string.Join(null, System.Text.RegularExpressions.Regex.Split(expr, "[\\d]"));
        }

我正在使用c#3.0和Framework3.5

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-04 07:49:33

代码语言:javascript
复制
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);
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2010-05-04 07:33:37

使用此regex从完整文件名中获取日期。

代码语言:javascript
复制
@"_([0-9]*)\."

然后,如果需要,则将其转换为DateTime

代码语言:javascript
复制
DateTime dt;
 dt = new DateTime();
 dt = DateTime.ParseExact(MyString, "yyyyMMdd",null);

使用dt.CompareTo(dt1).Equals(1)比较日期是早的还是晚的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2763526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档