私は日付に基づいて並べ替えるファイルのリストを持っています。注意すべき点は、リスト内の各ファイルに日付がファイル名の一部として含まれていることです。この日付に基づいてファイルを並べ替える必要があります。これは、ファイル名文字列の日付がファイル内のコンテンツと相関するためです。つまり、ファイルの実際の日付プロパティ、作成日時、変更日時、アクセス日時などは、ファイルが移動されるたびに変更されることがあります私の目的のためにそれに依存することはできません。私は、リストの並べ替え方法で使用するためにカスタムのコンペアを作成していますが、そこにいる誰かがこれに対して他のより良いまたはユニークなアプローチを持っているかどうかを見たいと思っていました。前もって感謝します。ファイルの内容でファイルを並べ替える
はUPDATE:YYYYMMDDとHHMMSSは、それぞれの日付と時刻、ある
{Test Name}_{YYYYMMDD}_{HHmmSS}.txt
:サイードさんのコメントに答えて
は、ファイル名は、次の形式になります。
UPDATE 2:
[OK]を、それは他の誰かを助けている場合、私はちょうど良い仕事をしているようだアップ書かれた比較演算子を持って、ここにあります。それはファイル名の他の要素を検索するためにそれを変更するために多くの努力を払うことはありません、ちょうど正規表現を変更する必要があります。皆さんありがとうございます。建設的な批判はいつでも歓迎します。
public class TDRDateTimeComparer : IComparer<FileInfo>
{
public int Compare(FileInfo x, FileInfo y)
{
//Return if both strings are null or empty
if (string.IsNullOrEmpty(x.Name) && string.IsNullOrEmpty(y.Name))
{
return 0;
}
Regex rDateTime = new Regex(@"(19|20|21)\d\d(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])_([0-1]\d|2[0-3])([0-5]\d)([0-5]\d)");
/* NOTE: File names will already have been validated at this point, so no need to validate the date/time again.*/
string date1 = rDateTime.Match(x.Name).Value, date2 = rDateTime.Match(y.Name).Value;
DateTime d1 = DateTime.ParseExact(date1, "yyyyMMdd_HHmmss", null), d2 = DateTime.ParseExact(date2, "yyyyMMdd_HHmmss", null);
return d1.CompareTo(d2);
}
}
あなたのファイル名の形式は何ですか、そしてそれを改善するために何をしましたか? –