Я знаю, что это, скорее всего, открытый вопрос, но я возьму наиболее уважаемые ответы и объединю их здесь для справки.
Я работаю над набором инструментов для чтения и записи Файлы Mobipocket (он же Kindle eBooks), используя C #, и сталкиваюсь с вопросом дизайна, когда речь идет о написании новые файлы. Основной формат файла начинается с заголовка, который включает информацию о смещении / размере для всех следующих «блоков» данных. Это оставляет мне два следующих варианта:
Соберите все данных файла (блоков) заранее, прежде чем начать запись файла. Это может означать, что большие объемы содержимого документа находятся в памяти, но имеет то преимущество, что позволяет мне записать файл за один проход только вперед.
Записать в заголовок данные заполнителя, за которыми следуют неизвестные заранее данные файла, и затем выполнить поиск в заголовке и исправить данные смещения / размера непосредственно перед файл закрыт. Это кажется более сложным, но имеет то преимущество, что позволяет передавать содержимое документа по мере его создания, что потенциально сокращает объем используемой памяти.
Могут быть и другие проекты, о которых я хотел бы услышать. В настоящее время я склоняюсь к # 1, потому что я не ожидаю особо больших документов и думаю, что с моделью программирования легче разобраться. Если у вас был какой-либо положительный или отрицательный опыт работы с одним из этих проектов (или другим предложенным предложением), пожалуйста, сообщите мне!