web-dev-qa-db-ja.com

.NETで作成日ごとにファイルを取得する

多くのファイルを含むフォルダーがあります。ディレクトリ内のファイル名を作成日時でソートする簡単な方法はありますか?

Directory.GetFiles()を使用すると、ファイル名でソートされたファイルが返されます。

79
Senseful

これはあなたのために働くことができます。

using System.Linq;

DirectoryInfo info = new DirectoryInfo("PATH_TO_DIRECTORY_HERE");
FileInfo[] files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray();
foreach (FileInfo file in files)
{
    // DO Something...
}
171
George Taskos

Linqを使用できます

var files = Directory.GetFiles(@"C:\", "*").OrderByDescending(d => new FileInfo(d).CreationTime);
42
Sev

LINQを使用したくない場合

// Get the files
DirectoryInfo info = new DirectoryInfo("path/to/files"));
FileInfo[] files = info.GetFiles();

// Sort by creation-time descending 
Array.Sort(files, delegate(FileInfo f1, FileInfo f2)
{
    return f2.CreationTime.CompareTo(f1.CreationTime);
});
8
Henrik

これは、最終変更日とその年齢を返します。

DateTime.Now.Subtract(System.IO.File.GetLastWriteTime(FilePathwithName).Date)
4
BMG

@jing:「DirectoryInfoソリューションはこれよりずっと高速です(特にネットワークパスの場合)」

確認できません。 Directory.GetFilesがファイルシステムまたはネットワークキャッシュをトリガーするようです。最初の要求には時間がかかりますが、新しいファイルが追加された場合でも、次の要求ははるかに高速です。私のテストでは、Directory.getfilesとinfo.GetFilesを同じパターンで実行し、両方とも等しく実行しました

GetFiles  done 437834 in00:00:20.4812480
process files  done 437834 in00:00:00.9300573
GetFiles by Dirinfo(2)  done 437834 in00:00:20.7412646
1
Passer

パフォーマンスに問題がある場合は、MS_DOSで次のコマンドを使用できます。

dir /OD >d:\dir.txt

このコマンドは、** d:**ルートにdir.txtファイルを生成し、すべてのファイルを日付でソートします。そして、コードからファイルを読み取ります。また、*および?で他のフィルターを追加します。

0
grandhougday
            DirectoryInfo dirinfo = new DirectoryInfo(strMainPath);
            String[] exts = new string[] { "*.jpeg", "*.jpg", "*.gif", "*.tiff", "*.bmp","*.png", "*.JPEG", "*.JPG", "*.GIF", "*.TIFF", "*.BMP","*.PNG" };
            ArrayList files = new ArrayList();
            foreach (string ext in exts)
                files.AddRange(dirinfo.GetFiles(ext).OrderBy(x => x.CreationTime).ToArray());
0
Ata Hoseini