Самый безопасный способ - открыть файл и очистить его после записи, а затем закрыть, если более поздняя запись не будет выполнена.Многие вещи, находящиеся вне контроля вашей программы, могут повредить содержимое вашего файла.Имейте это в виду, как вы читаете дальше.
Я предлагаю сохранить std::map
или std::vector
из FILE
указателей.map
позволяет получить доступ к указателям на файлы по идентификатору.Если диапазон идентификаторов небольшой, вы можете создать vector
, зарезервировать элементы и использовать идентификатор в качестве индекса.Это позволит вам держать много файлов открытыми одновременно.Остерегайтесь концепции повреждения данных.
Предел одновременного открытия файлов устанавливается операционной системой.Например, если ваша ОС имеет максимум 10, вы должны принять меры при запросе 11-го файла.
Еще один трюк - это резервные буферы в динамической памяти для каждого файла.Когда все данные обработаны, откройте файл (или более одного), запишите буфер (используя один fwrite
), закройте и продолжайте.Это может быть быстрее, так как вы записываете в память во время обработки данных, а не в файл.Интересным примечанием является то, что ваша ОС также может создавать буферы на жестком диске.Размер и количество буферов - это проблема оптимизации, которая зависит от платформы (вам придется настроить и протестировать, чтобы получить хорошую комбинацию).Ваша программа замедлится, если ОС загрузит память на диск.