Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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)  
> частями сохраняю текст в файл. И в конце каждой части какой-
> то левый символ - ну на сколько я онял - символ "конца"
> записывается,

Какого "конца"?
Пишет длину строки в файл, читает в мемо с помощью стандартных методов, а потом удивляется откуда лишнии символы. Не пиши и не будет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо