Главная страница
    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.45 MB
Время: 0.042 c
3-1191419305
312kbps
2007-10-03 17:48
2008.02.17
Создание dbf , не првильный формат.


2-1199601939
vegarulez
2008-01-06 09:45
2008.02.17
Вопрос про память.


3-1191590503
denmin
2007-10-05 17:21
2008.02.17
Рушится Paradox.


2-1201155932
Василий К.
2008-01-24 09:25
2008.02.17
Extended в TThread и его деление...


2-1201254130
abhtr
2008-01-25 12:42
2008.02.17
WinExec непонятно работает





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский