![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TFileStream
Колобок © (2006-03-30 16:42:00)частями сохраняю текст в файл. И в конце каждой части какой-то левый символ - ну на сколько я онял - символ "конца" записывается, потом при чтении файла он тоже есть, как его избежать??
Вот части программы:
запись:
F := TFileStream.Create(dlgSave1.FileName, fmOpenReadWrite);
...
len := length(str);
F.Write(len, 1);
for j := 1 to len do F.Write(str[j], 1);
чтение:
F := TFileStream.Create(dlgCommon.FileName, fmOpenReadWrite);
F.Position := 0;
Memo.Lines.LoadFromStream(F);
F.Free;
Колобок (2006-03-30 17:26:00) [1]
> Достаточно было прочитать пост [1], где об этом говорилось.
да это я понял тож.
Джо (2006-03-30 17:24:00) [2]> [14] Колобок (30.03.06 17:08)
> достаточно было убрать строчку F.Write(len, 1);.
Достаточно было прочитать пост [1], где об этом говорилось.
vovnuke (2006-03-30 17:17:00) [3]FileStream.Write(), пишет побайтно, а Length()- Integer;
Уж пиши хотя бы FileStream.Write(buff, sizeof(buff));
Колобок (2006-03-30 17:11:00) [4]
> Ты со стула упал что ли ?
>
> Если, к примеру, len = 1 ты запишешь в текстовый файл, то
> с какого перепугу эта самая записанная тобой "единица" будет
> считаться символом, допустимым именно в текстовых файлах
> ?
>
> Глаза-то разуй ...
ПРОГРАММА РАБОТАЕТ КОРРЕКТНО...(убрал строчку F.Write(len, 1);)тем более, len равнятся одному никак не может, ибо длина строки заранее равна 20...
Сергей М. (2006-03-30 17:10:00) [5]
> достаточно было убрать строчку
Ай малацца !
Колобок (2006-03-30 17:08:00) [6]ВСЁ, РАЗОБРАЛСЯ,
достаточно было убрать строчку F.Write(len, 1);.
Сергей М. (2006-03-30 17:07:00) [7]
> да связуется всё нормально, идет сохранение и в текстовый
> файл и в бинарный
Ты со стула упал что ли ?
Если, к примеру, len = 1 ты запишешь в текстовый файл, то с какого перепугу эта самая записанная тобой "единица" будет считаться символом, допустимым именно в текстовых файлах ?
Глаза-то разуй ...
Колобок (2006-03-30 17:03:00) [8]
> Чукча - не читатель, чукча - писатель :-(
угу, благодарю.
Плохиш (2006-03-30 17:01:00) [9]Чукча - не читатель, чукча - писатель :-(
Колобок (2006-03-30 16:59:00) [10]
> Попробуй нормально сформулировать вопрос, без своих домыслов
> о каких-то "символах конца файла". Потому, что у тебя тут
> жуткая путаница.
ладна, сформулирую тогда так. Вот, часть когда программы я написал, в ём можно что-то изменить что бы этих символов лишних небыло.
У меня туда запись идет так - из мемо по 20 символов. т.е
тут
len := length(str);
F.Write(len, 1);
for j := 1 to len do F.Write(str[j], 1);
str - это как раз таки эта строка из 20 символов. и вот это выполняется несколько раз, так вот сколько раз выполнится столько раз этот символ и записывается в конец, потом когда считываю и получается, что идет текст, а каждые 20 символов встречается какой-то левый знак.
Плохиш (2006-03-30 16:57:00) [11]
> идет сохранение и в текстовый файл и в бинарный.
я плякал
MBo (2006-03-30 16:54:00) [12]Для того, чтобы TStrings считать, не нужны длины строк, формат такой же, как у обычного текстового файла. Пишется тело строки, затем перевод строки #$D#$A
Джо (2006-03-30 16:54:00) [13]Попробуй нормально сформулировать вопрос, без своих домыслов о каких-то "символах конца файла". Потому, что у тебя тут жуткая путаница.
Колобок (2006-03-30 16:53:00) [14]
> > сохраняю текст в файл
>
>
> > len := length(str);
> > F.Write(len, 1);
>
>
> Две этих строчки никак не стыкуются с утверждением "текст
> в файл".
да связуется всё нормально, идет сохранение и в текстовый файл и в бинарный.
Колобок (2006-03-30 16:52:00) [15]
> И вообще тут никакого TFileStream не нужно. Просто Memo.
> Lines.SaveToFile & Memo.LinesLoadFromFile.
не, я из мемо сохряняю частями, т.е по 20 символов, НЕ сразу целиком
Сергей М. (2006-03-30 16:51:00) [16]
> сохраняю текст в файл
> len := length(str);
> F.Write(len, 1);
Две этих строчки никак не стыкуются с утверждением "текст в файл".
Джо (2006-03-30 16:48:00) [17]> F.Write(len, 1);
F.Write(len,SizeOf(len));
Но это не нужно, раз ты впоследствии делаешь Memo.Lines.LoadFromStream(F);
И вообще тут никакого TFileStream не нужно. Просто Memo.Lines.SaveToFile & Memo.LinesLoadFromFile.
MBo (2006-03-30 16:48:00) [18]Memo.Lines.LoadFromStream умеет загружать не тот формат, который ты выбрал для записи
Плохиш (2006-03-30 16:48:00) [19]
> Колобок (30.03.06 16:42)
> частями сохраняю текст в файл. И в конце каждой части какой-
> то левый символ - ну на сколько я онял - символ "конца"
> записывается,
Какого "конца"?
Пишет длину строки в файл, читает в мемо с помощью стандартных методов, а потом удивляется откуда лишнии символы. Не пиши и не будет.