2015-06-11 5 views
0

Как я могу отрезать ненужное пространство, оставшееся в конце файла с помощью fstream? У меня есть бинарный файл размером ~ 250 мб, и после определенных операций у меня осталось ~ 100 мб данных, оставшихся в файле (в начале). Однако файл все еще 250 МБ. Как я могу освободить место на диске?fstream - сокращающийся файл

Это не очень много идентичных структур, записанных в файл последовательно с помощью:

fstream::write((char *)data_struct,sizeof(data_struct)); 

Иногда на Структуры конце файла больше не нужны.

+0

Там нет общего решения для этого ... Мы не знаем структуру файла – Vinzenz

+0

@Vinzenz Это просто много одинаковых структур записывается в файл последовательно (используя 'fstream :: write ((char *) data_struct, sizeof (data_struct)'), а иногда те, которые находятся в конце файла, больше не нужны. – maniek765

ответ

0

Файловые потоки не поддерживают усечение кроме случаев, когда открывается. Вам нужно будет закрыть его, а затем использовать определенный для ОС метод, чтобы установить точную длину. Для Windows и Linux, который:

Окна: SetEndOfFile()

Linux: truncate()/ftruncate()

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