Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];

Вниз

При записи в файл через TFileStream и TWriter в файл попадает мусор   Найти похожие ветки 

 
TFileStream   (2008-01-26 22:13) [0]

При записи в файл через TFileStream и TWriter в файл попадает мусор

[code]
procedure Load;
var
 fs:TFileStream;
 tw:TWriter;
 s:string;
 i:word;
begin
 s:="";
 fs:=TFileStream.Create("table.txt",fmCreate or fmOpenWrite);
 tw:=TWriter.Create (fs, 1);
  try
   tw.WriteListBegin;
   tw.WriteChar("B");
   tw.WriteListEnd;
  finally
   tw.free;
   fs.free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Load;
end;
[/code]

Вместо одного байта файл содержит пять, вот пример (in hex):
01 01 01 42 00

В чём тут дело?


 
jack18_   (2008-01-26 23:30) [1]


> Вместо одного байта файл содержит пять

а с чего ты взял, что он должен соджержать 1 байт??
По твоему эти три строчки
>   tw.WriteListBegin;    tw.WriteChar("B");    tw.WriteListEnd;

один байт что ли запишут??? Ну так ты глубоко ошибаешся.


 
TFileStream   (2008-01-26 23:48) [2]

Да, это понятно, но если вот так сделать:

try
  tw.WriteChar("B");
finally
  tw.free;
  fs.free;
end;


То всё равно там
06 01 42

А нужно что бы только один символ туда записался.


 
jack18_   (2008-01-27 00:42) [3]


> То всё равно там


потому что райтер, как я понимаю еще и сигнатуру в поток пишет.
кажись от использования райтера и просто через поток пиши:


procedure Stream_WriteChar(Stream: Tstream; Ch: Char);
begin
 Stream.WriteBuffer(Ch, SizeOf(Ch))
end;

fs:=TFileStream.Create("table.txt",fmCreate or fmOpenWrite);
try
  Stream_WriteChar(fs, "B" );
finally
 fs.free;
end;



 
Jack128_   (2008-01-27 00:44) [4]

Кстати, записывать данные в файл в процедуре под название Load - это мягко говоря спорное решение ;-)


 
Германн ©   (2008-01-27 00:52) [5]


> Jack128_   (27.01.08 00:44) [4]
>
> Кстати, записывать данные в файл в процедуре под название
> Load - это мягко говоря спорное решение ;-)
>

Да. Лучше переименовать в UpLoad :)


 
TFileStream   (2008-01-27 12:00) [6]

>Кстати, записывать данные в файл в процедуре под название Load - это мягко говоря спорное решение ;-)

Я привёл только фрагмент процедуры.

Спасибо, вопрос решён.



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

Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.037 c
1-1194517113
DDDeN
2007-11-08 13:18
2008.02.17
Реализация механизма расписания


2-1200392049
rys
2008-01-15 13:14
2008.02.17
как написать html редактор


15-1199834693
Fedor
2008-01-09 02:24
2008.02.17
Постоянная удаленная работа для Delphi программиста, 2-3 ч.в день


15-1200497580
ProgRAMmer Dimonych
2008-01-16 18:33
2008.02.17
Я чего-то недопёр


3-1191409726
alll_23
2007-10-03 15:08
2008.02.17
Как выполнить запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский