![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
grindbastard |
|
||||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.5.2013 Репутация: нет Всего: нет |
Доброго всем времени суток!
Ребят помогите разобраться. Задание:
Код получился следующий:
Вопрос в следующем: как правильно реализовать сие - "Если размер текста превышает размер файла, выделять дополнительную область памяти фиксированного размера" |
||||
|
|||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Рискну предположить, что речь идёт об этом:
То есть при превышении лимита (текущего размера отображенного в память файла) необходимо старое отображение закрыть и открыть новое с увеличенным лимитом. И так далее. Таким образом Вы не дописываете текст в конец файла (отчего лимит и может исчерпаться), так Вы перезаписываете начало файла... И я бы не стал на каждом цикле переоткрывать файл и пересоздавать отображение, более того: а Вы switch придумали, не нужен он. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
grindbastard |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.5.2013 Репутация: нет Всего: нет |
хм,в соответствии с заданием при превышении необходимо выделять дополнительную память, а не закрывать отображение. т.е. отображение открыто,а уже к нему выделяется блок доп памяти.
а каким образом тогда это все можно реализовать? |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Не думаю. Поскольку размер файла должен расти с ростом объёма вводимого текста, то это как раз достигается переоткрытием увеличенного отображения файла. Вы запоминаете позицию в отображении (офсет), где заканчивается ранее введённый текст. При добавлении нового текста Вы проверяете, хватает ли свободного пространства в файле. Если хватает, то просто добавляете, начиная с офсета, потом офсет корректируется на размер добавленного текста. Если места не хватает, то придётся переоткрывать отображения файла увеличенного размера (так, чтобы влез добавляемый текст). При этом уже введённый текст перекопировать не нужно, поскольку он уже содержится в файле, соответственно, и значение офсета остаётся прежним (при переоткрытии отображения). Затем добавляется текст, как в первом случае. Под конец делается flush, чтобы синхронизировать отображение с файлом на диске:
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
grindbastard |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.5.2013 Репутация: нет Всего: нет |
Не совсем понимаю как реализовать само условие в цикле (while (какое условие?))
И можно пример кода этого...а то чтот не моу понять....
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Приблизительно так (и без юникода):
2 дополнительных байта идут на перевод строки - '\r', '\n'. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |