17

.NET Directory.GetFiles には便利な関数があり、ディレクトリからすべてのファイルを取得する必要がある場合に簡単に使用できます。

Directory.GetFiles("c:\\Files")

しかし、作成時刻が異なるファイルがたくさんある場合、作成時刻が今日のファイルのみを取得するには、どのように (どのようなパターンで) 使用できますか?

ありがとう!

4

7 に答える 7

28

パフォーマンスに関しては、特にディレクトリ検索が大規模になる可能性がある場合はDirectory.EnumerateFiles()、検索パスを遅延して列挙する を使用する方が、検索パスDirectory.GetFiles()を積極的に列挙し、すべての一致を収集してからフィルタリングするよりも推奨されます。

DateTime today = DateTime.Now.Date ;
FileInfo[] todaysFiles = new DirectoryInfo(@"c:\foo\bar")
                         .EnumerateFiles()
                         .Select( x => {
                            x.Refresh();
                            return x;
                         })
                         .Where( x => x.CreationTime.Date == today || x.LastWriteTime == today )
                         .ToArray()
                         ;

のプロパティFileSystemInfoとそのサブタイプはキャッシュできる (そしてキャッシュされる) ため、それらは必ずしも地上の現在の現実を反映していないことに注意してください。Refresh()したがって、データが正しいことを確認するための呼び出し。

于 2012-12-13T19:32:09.390 に答える
28

これを試して:

var todayFiles = Directory.GetFiles("path_to_directory")
                 .Where(x => new FileInfo(x).CreationTime.Date == DateTime.Today.Date);
于 2012-12-13T18:05:08.817 に答える
3

ファイルのディレクトリ情報を取得する必要があります

public List<String> getTodaysFiles(String folderPath)
{
    List<String> todaysFiles = new List<String>();
    foreach (String file in Directory.GetFiles(folderPath))
    {
        DirectoryInfo di = new DirectoryInfo(file);
        if (di.CreationTime.ToShortDateString().Equals(DateTime.Now.ToShortDateString()))
            todaysFiles.Add(file);
    }
    return todaysFiles;
}
于 2012-12-13T18:07:54.727 に答える
1

次のコードを使用できます。

var directory = new DirectoryInfo("C:\\MyDirectory");
var myFile = (from f in directory.GetFiles()
             orderby f.LastWriteTime descending
             select f).First();

// or...
var myFile = directory.GetFiles()
             .OrderByDescending(f => f.LastWriteTime)
             .First();

ここを参照してください: .NET を使用して、ループせずにディレクトリ内の最新のファイルを検索する方法は?

于 2012-12-13T18:03:33.393 に答える
0

あなたはこれを乗り越えることができるはずです:

var loc = new DirectoryInfo("C:\\");


var fileList = loc.GetFiles().Where(x => x.CreationTime.ToString("dd/MM/yyyy") == currentDate);
foreach (FileInfo fileItem in fileList)
{
    //Process the file
}
于 2012-12-13T18:09:50.153 に答える
0

System.Linq を使用します。

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

特定の日付に分割したい場合は、フィルターを使用してこれを試すことができます

var files = from c in directoryInfo.GetFiles() 
            where c.CreationTime >dateFilter
            select c;
于 2012-12-13T18:04:06.937 に答える