Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Работа с памятью |
Автор: grindbastard 23.9.2013, 23:42 | ||||
Доброго всем времени суток! Ребят помогите разобраться. Задание:
Код получился следующий:
Вопрос в следующем: как правильно реализовать сие - "Если размер текста превышает размер файла, выделять дополнительную область памяти фиксированного размера" |
Автор: grindbastard 24.9.2013, 09:15 | ||
хм,в соответствии с заданием при превышении необходимо выделять дополнительную память, а не закрывать отображение. т.е. отображение открыто,а уже к нему выделяется блок доп памяти.
а каким образом тогда это все можно реализовать? |
Автор: feodorv 24.9.2013, 15:26 | ||||
Не думаю. Поскольку размер файла должен расти с ростом объёма вводимого текста, то это как раз достигается переоткрытием увеличенного отображения файла. Вы запоминаете позицию в отображении (офсет), где заканчивается ранее введённый текст. При добавлении нового текста Вы проверяете, хватает ли свободного пространства в файле. Если хватает, то просто добавляете, начиная с офсета, потом офсет корректируется на размер добавленного текста. Если места не хватает, то придётся переоткрывать отображения файла увеличенного размера (так, чтобы влез добавляемый текст). При этом уже введённый текст перекопировать не нужно, поскольку он уже содержится в файле, соответственно, и значение офсета остаётся прежним (при переоткрытии отображения). Затем добавляется текст, как в первом случае. Под конец делается flush, чтобы синхронизировать отображение с файлом на диске:
|
Автор: grindbastard 29.9.2013, 04:59 | ||
Не совсем понимаю как реализовать само условие в цикле (while (какое условие?)) И можно пример кода этого...а то чтот не моу понять....
|
Автор: feodorv 29.9.2013, 13:35 | ||
Приблизительно так (и без юникода):
2 дополнительных байта идут на перевод строки - '\r', '\n'. |