1

我有一个文件列表,它们的名称表明它们是何时创建的。他们的名字有约定“yyyyMMdd.txt”。yyyy 是年,MM 是月,dd 是日期。我正在尝试编写一个函数,该函数只能打开在 C# 的时间范围内创建的那些文件。

例如:我想访问在 2012 年 10 月 20 日到 2012 年 10 月 25 日之间创建的文件。任何名称属于该时间间隔的文件都将被访问。

函数签名与此类似:void dosomething (DateTime from, DateTime to)

有什么好的方法可以完成这个功能吗?任何建议,将不胜感激。

4

2 回答 2

1

您描述的文件名格式是词法(有序),因此您可以使用以下方法:

  1. 将 DateTime 输入转换为与文件名相同的格式 (yyyyMMdd)

  2. 读取文件名并将它们转换为整数,如 20121026

  3. 以相同的方式将输入转换为整数

  4. 现在使用普通的大于 >、小于 < 测试来确定日期是否在范围内。

于 2012-10-25T21:50:28.480 回答
0

这样的事情应该做你:

public static Regex rxFileName = new Regex( @"^\d{4}\d{2}\d{2}\.txt$" , RegexOptions.IgnoreCase ) ;
public static IEnumerable<FileInfo> FindFiles( this DirectoryInfo root , DateTime dtFrom , DateTime dtThru )
{
    string pfxFrom = dtFrom.ToString( "yyyyMMdd" ) ;
    string pfxThru = dtThru.ToString( "yyyyMMdd" ) ;

    foreach ( FileInfo fi in root.EnumerateFiles() )
    {
        if ( !rxFileName.IsMatch( fi.Name ) ) continue ;
        if ( fi.Name.CompareTo( pfxFrom ) < 0 ) continue ;
        if ( fi.Name.CompareTo( pfxThru ) > 0 ) continue ;
        yield return fi ;
    }

}
于 2012-10-25T22:04:45.343 回答