2012-02-21 3 views
2

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

Что я хочу сделать, это хранить много 100 МБ файлов в одном файле и хранить ссылку на то, где эти части начинаются и заканчиваются в одном файле.

Мой вопрос: каким образом можно добавить 100 МБ байтов в файл, чтобы я мог перезаписать эти фиктивные данные фактическими данными по мере их загрузки по сети. Таким образом, если другой запрос загрузки начинается в одно и то же время, он может начать добавлять следующие 100 МБ.

Есть ли лучший способ сделать это, чем просто написать 100 МБ 0 в файл? Есть ли способ расширения выделенного дискового пространства для файла более эффективно (имея в виду, он может записываться в настоящее время для предыдущих байтов файла)?

ответ

3

В некоторых системах (но, вероятно, не все) вы можете seek зайти в конец файла, чтобы создать большой файл с пустым пространством.

$ perl -e 'open FOO,">/tmp/foo"; seek FOO,1E6,0; print "foo\n"; close FOO' 
$ od -c /tmp/foo 
0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 
* 
3641100 f o o \n 
3641104 
+0

Awesome, спасибо. – GoldenNewby