![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Burka |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.5.2007 Репутация: нет Всего: 2 |
Идея такая: записывать в файл через потоки длинну строки, потом сому строку. А читать, соответственно, длинну а потом строку.
но вот этот код не работает, подскажите, где проблема? Запись
Чтение
-------------------- Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей. |
||||
|
|||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Добавлено через 56 секунд А ещё есть классы TWriter и TReader... |
||||
|
|||||
| Burka |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.5.2007 Репутация: нет Всего: 2 |
я вот не понял, что это значит? если ссчитать что s:integer.
SetLength(s2, s); - это хорошо) но предполагается что я не знаю длинны строки, когда читаю, то есть сначала ее тоже нужно прочитать из файла. Добавлено через 14 минут и 54 секунды Вот так работает. длинну еще на 1 приходитсмя увеличивать, а то он символа не дочитывает.
-------------------- Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей. |
||||
|
|||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
В первой перепутал - не ту строку поправил. Просто в моих программах обычно s - это string
|
||||
|
|||||
| Burka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.5.2007 Репутация: нет Всего: 2 |
ок, так тоже работает)
про S2[1] просто не думал даже) тперь буду знать. -------------------- Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Не так тоже, а именно так и работает.
А вот так stream.ReadBuffer(s2,s); не работает. А если работает, то только до перезапука программы. И некорректно. Ибо ты не считываешь строку, а просто читаешь указатель. В итоге у тебя s2 просто указывает на ту строку в памяти, которую ты до этого писал. То есть не берёт её из файла, а ссылается на строку, которая уже сидит в памяти, ибо ты просто прочитал указатель на неё. А тебе нужно читать строку. Просто отдавать в Write/Read нужно блок памяти. А стринг по сути указатель на эту память. Можно не s2[1], а по честному разыменовать указатель:
|
|||
|
||||
| Burka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.5.2007 Репутация: нет Всего: 2 |
Все ясно, Спасибо, что объеснил!
-------------------- Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |