2015-07-12 3 views
2

Я пишу данные трехмерной модели в файл, в то время как включает в себя множество различных типов информации (сетки, текстуры, анимацию и т. Д.) И будет иметь размер от 50 до 100 мб.Один большой файл или несколько небольших файлов?

Я хочу поместить все это в один файл, но я боюсь, что это будет стоить мне, если мне нужно будет прочитать только небольшую часть этого файла, чтобы получить то, что я хочу.

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

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

+1

'Я не знаю, как файловая система трактует пытается прыгать вокруг гигантских файлов, так что для всех I знать, что итерация через большой файл может быть либо дорогостоящей, либо вообще никакой проблемой. «Прыжки вокруг - это не то же самое, что читать все от начала до определенного места. Прыжки в порядке. – deviantfan

+1

Что такое «очень большое» в этом контексте? –

+0

@MatsPetersson - около 50mb. Это не ... массивный, я думаю, но это самый большой размер файла, который я использую регулярно. –

ответ

6

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

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

Вы можете посмотреть на fseek вызов, если вы не знакомы с поиском в файле: http://www.cplusplus.com/reference/cstdio/fseek/

Смежные вопросы