使用约束搜索目录中的文件

时间:2012-10-25 21:33:28

标签: c# sql algorithm datetime

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分: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 ;
    }

}