Как узнать, что я достиг максимального размера файла при использовании ofstream? - PullRequest
3 голосов
/ 25 сентября 2008

При записи файла с использованием ofstream, как узнать, когда размер файла достиг максимального размера файла ОС - точнее, максимального размера файла linux - ??

Ответы [ 4 ]

5 голосов
/ 25 сентября 2008

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

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

Обратите внимание, что фактический предел составляет чертовски большой для "типичной" файловой системы EXT2 - в терабайтах. Скорее всего, вы никогда не достигнете этого на практике. Если вы серьезно накапливаете терабайты данных, возможно, вы захотите подумать, есть ли более разумный способ их хранения, чем один гигантский файл.

4 голосов
/ 25 сентября 2008

Вы можете проверить, установлен ли неправильный бит . Кроме того, используя exception , вы можете заставить поток генерировать исключение, когда устанавливается плохой бит.

0 голосов
/ 26 сентября 2008

Что ж, fstream не имеет исключительного исключения для «записи в файл, который превышает максимальный размер файла, определенный реализацией» (из «записи man 2»), как код ошибки EFBIG, доступный при использовании функции C 'записывать'. Итак, я думаю, что нужно делать, как сказал Джим Крэфтон, и сравнивать размер файла с каким-то определенным пользователем максимальным размером или с максимальным значением, хранящимся в переменной streamoff, которая является типом переменной, используемым для обработки размеров файла смещение собственно - в iostream.

0 голосов
/ 25 сентября 2008

Я думаю (не уверен на 100%), что вам просто нужно сравнить текущий размер потока после записи с максимальным размером файла ОС. В противном случае, я предполагаю, что базовая реализация просто позволит вам продолжать писать до тех пор, пока не вызовут реальные вызовы ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...