Каков наилучший способ добавить заголовок в большой файл - PullRequest
6 голосов
/ 03 апреля 2011

Каков наилучший способ добавить заголовок (например, метаданные файла) к существующему файлу, если размер файла составляет около 1-2 ГБ?

в C ++

Ответы [ 4 ]

4 голосов
/ 03 апреля 2011

Лучший способ - просто записать заголовок в новый файл, а затем добавить содержимое старого.

C ++ не предоставляет способ вставки в начале существующего файла, так что это действительно лучшая ставка.Просто убедитесь, что вы прочитали достаточно большие куски из старого файла и добавили их в новый.Несмотря на то, что буферизация облегчит большинство проблем, связанных с выполнением этой операции небольшими порциями, вы все равно будете испытывать снижение производительности при большем количестве вызовов функций.

Это может быть минимальным, но оно все еще есть.Что касается файла 2G, я бы, вероятно, начал с того, что делал бы его по половине гигабайта, если только память не была слишком дорогой.Это позволяет использовать файлы большего размера без значительных потерь памяти, и четыре вызова для чтения / записи вряд ли станут проблемой производительности.

Но, как и во всех оптимизациях, измерьте, не догадайтесь.Существуют различные вещи низкого уровня, которые могут повлиять на производительность, о которых документ стандартов C ++ не упоминает (и это правильно).Поскольку в вашем вопросе не упоминается конкретная операционная система, я ответил на основании этого, но эти конкретные операционные системы могут обе (а) реагировать по-разному;и (b) предоставлять другие нестандартные вызовы, которые можно сделать быстрее.

1 голос
/ 03 апреля 2011

Способ only на любом языке - записать заголовок в новый файл, скопировать в него содержимое старого файла и затем переименовать файл.

0 голосов
/ 04 апреля 2011

Полагаю, вы могли бы сделать это с помощью некоторых низкоуровневых манипуляций с файловой системой, если вам действительно нужна супер производительность.Но я бы не рекомендовал идти по этому пути.

Мне также нравится идея, которую опубликовал Sege Dundich, о резервировании места для заголовка при первоначальной записи файла, но у вас может не быть этой опции доступной длявы.

0 голосов
/ 03 апреля 2011

Зависит от (1) файловой системы и ее параметров (например, размера блока), (2) размера заголовка, который вы должны добавить, (3) кто пишет файл.

Если вы создаете файл (1-2 Гб) самостоятельно, просто зарезервируйте байты для заголовка в начале файла.

...