| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Перезаписываение данных |
| Автор: artsb 1.2.2009, 17:27 | ||
| Здравствуйте! Хочу кое-что уточнить. Такая ситуация: Я записываю в начало потока (TMemoryStream *) значение типа int, а потом ещё какие-нибудь другие. После этого устанавливаю Position = 0 и записываю другое значение типа int. Вопрос в том, останется ли в живых всё остальное. А то в справке написано:
Как я понял старое значение перезаписывается, а Size становится равным Position + Count. Значит можно предположить, что всё остальное потеряно. |
| Автор: Rrader 1.2.2009, 17:47 |
| Буфер памяти TMemoryStream - линейная область памяти. Все останется, буфер памяти не очищается при записи, даже когда требуется расширение. Но это (неповреждение остальных данных) касается случая, когда в перезаписываемый участок мы будем писать столько байт, сколько сответствовало ранее записываемым в него данным. Если пишем меньше - будет участок неиспользуемых данных (не так критично, можно сказать, нет повреждения). Пишем больше - повреждение соседних данных (а это уже плохо) Твоя задача - сместить Position в нужную величину. |
| Автор: artsb 1.2.2009, 19:14 |
| Т.е. после того, как я перезапишу первое значение типа int на другое, то все остальные данные останутся. А почему тогда в справке написано, что Size становится равным Position + Count? Насколько я знаю, если задать Size, то не помещающаяся инфа будет обрезаться... |
| Автор: artsb 1.2.2009, 22:22 |
| Rrader, успокоил |