.NET Directory.GetFiles には便利な関数があり、ディレクトリからすべてのファイルを取得する必要がある場合に簡単に使用できます。
Directory.GetFiles("c:\\Files")
しかし、作成時刻が異なるファイルがたくさんある場合、作成時刻が今日のファイルのみを取得するには、どのように (どのようなパターンで) 使用できますか?
ありがとう!
パフォーマンスに関しては、特にディレクトリ検索が大規模になる可能性がある場合は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()
したがって、データが正しいことを確認するための呼び出し。
これを試して:
var todayFiles = Directory.GetFiles("path_to_directory")
.Where(x => new FileInfo(x).CreationTime.Date == DateTime.Today.Date);
ファイルのディレクトリ情報を取得する必要があります
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;
}
次のコードを使用できます。
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 を使用して、ループせずにディレクトリ内の最新のファイルを検索する方法は?
あなたはこれを乗り越えることができるはずです:
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
}
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;