Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

TFileStream   Найти похожие ветки 

 
Колобок   (2006-03-30 16:42) [0]

частями сохраняю текст в файл. И в конце каждой части какой-то левый символ - ну на сколько я онял - символ "конца" записывается, потом при чтении файла он тоже есть, как его избежать??
Вот части программы:
запись:
 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 16:48) [1]

> F.Write(len, 1);

F.Write(len,SizeOf(len));

Но это не нужно, раз ты впоследствии делаешь Memo.Lines.LoadFromStream(F);

И вообще тут никакого TFileStream не нужно. Просто Memo.Lines.SaveToFile & Memo.LinesLoadFromFile.


 
Плохиш ©   (2006-03-30 16:48) [2]


> Колобок   (30.03.06 16:42)  
> частями сохраняю текст в файл. И в конце каждой части какой-
> то левый символ - ну на сколько я онял - символ "конца"
> записывается,

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


 
MBo ©   (2006-03-30 16:48) [3]

Memo.Lines.LoadFromStream умеет загружать не тот формат, который ты выбрал для записи


 
Сергей М. ©   (2006-03-30 16:51) [4]


> сохраняю текст в файл


>  len := length(str);
>  F.Write(len, 1);


Две этих строчки никак не стыкуются с утверждением "текст в файл".


 
Колобок   (2006-03-30 16:52) [5]


> И вообще тут никакого TFileStream не нужно. Просто Memo.
> Lines.SaveToFile & Memo.LinesLoadFromFile.

не, я из мемо сохряняю частями, т.е по 20 символов, НЕ сразу целиком


 
Колобок   (2006-03-30 16:53) [6]


> > сохраняю текст в файл
>
>
> >  len := length(str);
> >  F.Write(len, 1);
>
>
> Две этих строчки никак не стыкуются с утверждением "текст
> в файл".

да связуется всё нормально, идет сохранение и в текстовый файл и в бинарный.


 
Джо ©   (2006-03-30 16:54) [7]

Попробуй нормально сформулировать вопрос, без своих домыслов о каких-то "символах конца файла". Потому, что у тебя тут жуткая путаница.


 
MBo ©   (2006-03-30 16:54) [8]

Для того, чтобы TStrings считать, не нужны длины строк, формат такой же, как у обычного текстового файла. Пишется тело строки, затем перевод строки #$D#$A


 
Плохиш ©   (2006-03-30 16:57) [9]


> идет сохранение и в текстовый файл и в бинарный.

я плякал


 
Колобок   (2006-03-30 16:59) [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 17:01) [11]

Чукча - не читатель, чукча - писатель :-(


 
Колобок   (2006-03-30 17:03) [12]


> Чукча - не читатель, чукча - писатель :-(

угу, благодарю.


 
Сергей М. ©   (2006-03-30 17:07) [13]


> да связуется всё нормально, идет сохранение и в текстовый
> файл и в бинарный


Ты со стула упал что ли ?

Если, к примеру, len = 1 ты запишешь в текстовый файл, то с какого перепугу эта самая записанная тобой "единица" будет считаться символом, допустимым именно в текстовых файлах ?

Глаза-то разуй ...


 
Колобок   (2006-03-30 17:08) [14]

ВСЁ, РАЗОБРАЛСЯ,
достаточно было убрать строчку F.Write(len, 1);.


 
Сергей М. ©   (2006-03-30 17:10) [15]


> достаточно было убрать строчку


Ай малацца !


 
Колобок   (2006-03-30 17:11) [16]


> Ты со стула упал что ли ?
>
> Если, к примеру, len = 1 ты запишешь в текстовый файл, то
> с какого перепугу эта самая записанная тобой "единица" будет
> считаться символом, допустимым именно в текстовых файлах
> ?
>
> Глаза-то разуй ...

ПРОГРАММА РАБОТАЕТ КОРРЕКТНО...(убрал строчку F.Write(len, 1);)тем более, len равнятся одному никак не может, ибо длина строки заранее равна 20...


 
vovnuke ©   (2006-03-30 17:17) [17]

FileStream.Write(), пишет побайтно, а Length() - Integer;
Уж пиши хотя бы FileStream.Write(buff, sizeof(buff));


 
Джо ©   (2006-03-30 17:24) [18]

> [14] Колобок   (30.03.06 17:08)
> достаточно было убрать строчку F.Write(len, 1);.

Достаточно было прочитать пост [1], где об этом говорилось.


 
Колобок   (2006-03-30 17:26) [19]


> Достаточно было прочитать пост [1], где об этом говорилось.

да это я понял тож.



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
5-1129206349
Vetas
2005-10-13 16:25
2006.04.16
Проблема с Height


5-1129264772
MikeGipson
2005-10-14 08:39
2006.04.16
Не могу показать компонент


1-1142232211
markers
2006-03-13 09:43
2006.04.16
GIF и ресурсы


1-1142426693
ilkz
2006-03-15 15:44
2006.04.16
Как вывести в StringGrid греческий символ?


15-1143184320
Sergey13
2006-03-24 10:12
2006.04.16
"Устами младенца" или "Говорят дети"