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 に答える