Подтвердить что ты не робот

Directory.GetFiles только сегодня

В .NET Directory.GetFiles есть хорошая функция, она проста в использовании, когда мне нужно получить все файлы из каталога.

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

Но как (какой шаблон) я могу использовать для получения только тех файлов, которые создали время, если есть много файлов с разным временем создания?

Спасибо!

4b9b3361

Ответ 1

Попробуйте следующее:

var todayFiles = Directory.GetFiles("path_to_directory")
                 .Where(x => new FileInfo(x).CreationTime.Date == DateTime.Today.Date);

Ответ 2

Для производительности, особенно если поиск в каталоге, вероятно, будет большим, использование 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() для обеспечения правильности данных.

Ответ 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;
}

Ответ 5

используя 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;

Ответ 6

Вы должны пройти через это:

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
}