Це залежить від того, де знаходяться файли. Наприклад, якщо всі вони повинні бути в одному каталозі, ви можете прочитати всі записи каталогів у хеш-таблиці, а потім перевірити всі назви в хеш-таблиці. У деяких системах це може бути швидшим, ніж перевірка кожного файлу окремо. Найшвидший спосіб перевірити кожен файл окремо залежить від вашої системи ... якщо ви пишете ANSI C, найшвидший спосіб полягає в fopen
тому, що це єдиний спосіб (файл може існувати, але не бути відкритим, але ви, мабуть, дуже хочете відкрити, якщо ви потрібно "зробити щось на цьому"). C ++, POSIX, Windows - всі додаткові можливості.
Поки я на це, дозвольте зазначити деякі проблеми з вашим запитанням. Ви говорите, що хочете найшвидший спосіб, і у вас є тисячі файлів, але потім ви запитуєте код функції для тестування одного файлу (і ця функція дійсна лише на C ++, а не на C). Це суперечить вашим вимогам, роблячи припущення щодо рішення ... випадку проблеми XY . Ви також говорите "у стандартних c ++ 11 (або) c ++ (або) c" ... які всі різні, і це також не відповідає вашій вимозі швидкості ... найшвидше рішення передбачає пристосування коду до цільова система. Невідповідність запитання підкреслюється тим, що ви прийняли відповідь, яка дає рішення, які залежать від системи та не є стандартними C або C ++.
boost::filesystem
здається, використовуєstat()
. (Припускаючи документацію.) Я не думаю, що ви можете зробити набагато швидше для FS-дзвінків. Швидкий спосіб зробити те, що ви робите, - це "уникати перегляду тисяч файлів".