我有一个文件列表,其名称在创建时指明。他们的名字有公约“yyyyMMdd.txt”。 yyyy是年,MM是几个月,dd是日期。我正在尝试编写一个只能打开在C#中的时间范围内创建的文件的函数。
例如:我想访问在2012年10月20日到10/25/2012之间创建的文件。将访问任何名称落在该时间间隔内的文件。
函数签名与此类似:void dosomething(DateTime from,DateTime to)
有没有什么好方法可以完成这个功能?任何建议,将不胜感激。
答案 0 :(得分:1)
您描述的文件名格式是词法(有序),因此您可以使用以下方法:
将DateTime输入转换为与文件名相同的格式(yyyyMMdd)
读取文件名并将其转换为整数,如20121026
以相同的方式将输入转换为整数
现在使用普通大于>,小于<测试以确定日期是否在范围内。
答案 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 ;
}
}