Чтение в каталоге из заданной точки файла в C++
У меня есть две программы, которые будут читать / записывать файлы в один и тот же каталог одновременно (но не в один и тот же файл одновременно). У меня есть часть написания, но я изо всех сил пытаюсь получить на полпути приличную и рабочую реализацию части каталога чтения.
Файлы в каталоге следуют следующей схеме именования:Image-[INDEX]-[KEY/DEL]--[TIMESTAMP]
[INDEX]
увеличивается от 000000
, [KEY/DEL]
чередуется в зависимости от того, является ли изображение ключевым или дельта-кадром, и [TIMESTAMP]
это время эпохи Unix / Linux при создании файла.
Прямо сейчас, программа чтения читает в каталоге (используя dirent.h
библиотека) один файл за раз каждый раз, когда нужно найти изображение в каталоге. Когда каталог становится очень большим, я представляю, что эта операция / метод быстро станет чрезвычайно ресурсоемкой и в конечном итоге потерпит неудачу. Итак, я пытаюсь найти альтернативный метод. Я думал о чтении во всем каталоге при инициализации и сохранении информации о файле в массиве для доступа / использования позже в программе. Затем, когда запрашивается файл, которого нет в массиве, программа запускает и обновляет массив файлов, читая в каталоге, но на этот раз, начиная с точки, которую он остановил в конце инициализации.
Это возможно? Чтобы начать чтение в именах файлов в каталоге в известной точке (последний файл "прочитан в") в каталоге? Или мне каждый раз начинать все сначала?
Или есть лучший способ сделать это?
Благодарю.
1 ответ
Как сказал Эндрю, я бы подтвердил, что это действительно проблема, прежде чем пытаться ее решить.
Если вы можете не учитывать возможность создания файлов в непоследовательном порядке, то есть ни один файл, который вы хотите обработать до того, как другой файл не будет создан после этого файла, тогда вы можете использовать этот метод.
Сначала прочитайте весь список каталогов в массив или vector
, Затем, при переборе файлов, просто переберите вектор. Наконец, если вы получили файл, который не был найден или достигли конца вектора, обновите его на тот случай, если будет создано больше.
Вы, несомненно, захотите инкапсулировать эту логику в некоторый объект контекста, который запоминает последний прочитанный файл. Вы также можете оптимизировать, отсортировав вектор.