bug в TStream.SaveToFile ?
3 отговора
124 прегледа
bug в TStream.SaveToFile ?
Следния примерен код дава странни резултати:
var
TmpStream : TMemoryStream;
IntVar : Integer;
ByteVar : Byte;
StrVar : String; //в Delphi6 -> AnsiString, null терминиран
begin
IntVar := 1000;
ByteVar := 100;
StrVar := 'що не става да му!';
TmpStream := TMemoryStream.Create;
with TmpStream do
begin
Write(IntVar, SizeOf(IntVar));
Write(ByteVar, SizeOf(ByteVar));
Write(StrVar, Length(StrVar));
SaveToFile(Path);
Free;
end;
end;
... имам чувството, че TStream (TMemoryStream е негов наследник) грешно конвертира стрингове или трябва преди това да конвертирам в Byte тип ръчно, но как.. изключвам възможността знак по знак, бавно и глупаво, би трябвало сам да го прави, а Integer и Byte типовете се записват коректно, освен това в самия stream мисля, че стринга се записва коректно, но след записа става каша в файла почему ?
Моля спешно помогнете
...may the source be with you
var
TmpStream : TMemoryStream;
IntVar : Integer;
ByteVar : Byte;
StrVar : String; //в Delphi6 -> AnsiString, null терминиран
begin
IntVar := 1000;
ByteVar := 100;
StrVar := 'що не става да му!';
TmpStream := TMemoryStream.Create;
with TmpStream do
begin
Write(IntVar, SizeOf(IntVar));
Write(ByteVar, SizeOf(ByteVar));
Write(StrVar, Length(StrVar));
SaveToFile(Path);
Free;
end;
end;
... имам чувството, че TStream (TMemoryStream е негов наследник) грешно конвертира стрингове или трябва преди това да конвертирам в Byte тип ръчно, но как.. изключвам възможността знак по знак, бавно и глупаво, би трябвало сам да го прави, а Integer и Byte типовете се записват коректно, освен това в самия stream мисля, че стринга се записва коректно, но след записа става каша в файла почему ?
Моля спешно помогнете
...may the source be with you
Редактирано от Maнитy на
Re: bug в TStream.SaveToFile ?
Здрасти Маниту приательо,
много време мина от както не сме се виждали за нещастие..
как са жените, пиенето и .... т.н.
Да минем на въпроса това което искаш да направиш става така:
Write(Pointer(StrVar)^, Length(StrVar));
По време на байт експо ще идвам в София как да се свържа с теб .. бих искал да се видим имам доста работи да ти казвам.. пък и да пием по една бира :))) с две жени.
Чао
Дори и да не можеш - ТРЯБВА.
Щом трябва значи МОЖЕШ.
много време мина от както не сме се виждали за нещастие..
как са жените, пиенето и .... т.н.
Да минем на въпроса това което искаш да направиш става така:
Write(Pointer(StrVar)^, Length(StrVar));
По време на байт експо ще идвам в София как да се свържа с теб .. бих искал да се видим имам доста работи да ти казвам.. пък и да пием по една бира :))) с две жени.
Чао
Дори и да не можеш - ТРЯБВА.
Щом трябва значи МОЖЕШ.
Re: bug в TStream.SaveToFile ?
az pak obicham da go prawq taka:
sz:=length(str);
s.write(sz,sizeof(sz));
s.write(str[1],sz);
a posle si go chetesh:
s.read(sz,sizeof(sz));
setlength(str,sz);
fillchar (str,sz,0);//towa tuka e shtoto wednaj mi prawishe AV pri podoben sluchaj
s.read(s[1],sz);
sz:=length(str);
s.write(sz,sizeof(sz));
s.write(str[1],sz);
a posle si go chetesh:
s.read(sz,sizeof(sz));
setlength(str,sz);
fillchar (str,sz,0);//towa tuka e shtoto wednaj mi prawishe AV pri podoben sluchaj
s.read(s[1],sz);
Re: bug в TStream.SaveToFile ?
Туй добре, но когато имаш 2MB текст и отгоре става меча услуга, но както отгороворих на Швейк в програмисти трика който сработи при мен е с междинно трансформиране в TStringStream и неговия метод, все пак благодаря и на двамата, ако почуствате суша в гърлата си, аз съм насреща с пиво почерпка
...may the source be with you
...may the source be with you