textfilestream_在Delphi 2010中写一个字符串到TFileStream

I have Delphi 2007 code that looks like this:

procedure WriteString(Stream: TFileStream; var SourceBuffer: PChar; s: string);

begin

StrPCopy(SourceBuffer,s);

Stream.Write(SourceBuffer[0], StrLen(SourceBuffer));

end;

I call it like this:

var

SourceBuffer : PChar;

MyFile: TFileStream;

....

SourceBuffer := StrAlloc(1024);

MyFile := TFileStream.Create('MyFile.txt',fmCreate);

WriteString(MyFile,SourceBuffer,'Some Text');

....

This worked in Delphi 2007, but it gives me a lot of junk characters in Delphi 2010. I know this is due to unicode compliance issues, but I am not sure how to address the issue.

Here is what I've tried so far:

Change the data type of

SourceBuffer(and also the parameter

expected by WideString) to PWideChar

What am I doing wrong?

解决方案

You don't need a separate buffer to write a string to a stream. Probably the simplest way to do it is to encode the string to UTF8, like so:

procedure TStreamEx.writeString(const data: string);

var

len: cardinal;

oString: UTF8String;

begin

oString := UTF8String(data);

len := length(oString);

self.WriteBuffer(len, 4);

if len > 0 then

self.WriteBuffer(oString[1], len);

end;

function TStreamEx.readString: string;

var

len: integer;

iString: UTF8String;

begin

self.readBuffer(len, 4);

if len > 0 then

begin

setLength(iString, len);

self.ReadBuffer(iString[1], len);

result := string(iString);

end;

end;

I've declared TStreamEx as a class helper for TStream, but it shouldn't be too difficult to rewrite these as a solo procedure and function like your example.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值