Я пытаюсь написать функцию на C #, которая получает путь к каталогу в качестве параметра и возвращает словарь, в котором ключами являются файлы непосредственно в этом каталоге, а значения - их время последнего изменения.Это легко сделать с помощью Directory.GetFiles (), а затем File.GetLastWriteTime ().Однако это означает, что каждый файл должен быть доступен, что слишком медленно для моих нужд.Есть ли способ сделать это при доступе только к каталогу?Поддерживает ли файловая система даже такое требование?
Отредактируйте, прочитав несколько ответов: Спасибо, ребята, вы все говорите почти одинаково - используйте объект FileInfo.Тем не менее, так же медленно использовать Directory.GetFiles () (или Directory.EnumerateFiles ()) для получения этих объектов, и я подозреваю, что для их получения требуется доступ к каждому файлу.Если файловая система хранит время последней модификации своих файлов только в самих файлах, не может быть способа извлечь эту информацию без доступа к файлу.Это тот случай, здесь?Получают ли GetFiles () и EnumerateFiles () из DirectoryInfo доступ к каждому файлу или получают их информацию из записи каталога?Я знаю, что если бы я хотел получить только имена файлов, я мог бы сделать это с помощью класса Directory, не обращаясь к каждому файлу.Но получение атрибутов кажется сложнее ...
Редактировать, следуя ответу Хенка: кажется, что на самом деле быстрее использовать объект FileInfo.Я создал следующий тест:
static void Main(string[] args)
{
Console.WriteLine(DateTime.Now);
foreach (string file in Directory.GetFiles(@"\\169.254.78.161\dir"))
{
DateTime x = File.GetLastWriteTime(file);
}
Console.WriteLine(DateTime.Now);
DirectoryInfo dirInfo2 = new DirectoryInfo(@"\\169.254.78.161\dir");
var files2 = from f in dirInfo2.EnumerateFiles()
select f;
foreach (FileInfo file in files2)
{
DateTime x = file.LastWriteTime;
}
Console.WriteLine(DateTime.Now);
}
Для примерно 800 файлов я обычно получаю что-то вроде:
31/08/2011 17: 14: 48
31/08/2011 17:14: 51
31.08.2011 17: 14: 52