在Delphi 2010中写一个字符串到TFileStream
发布时间:2020-12-15 06:09:47 所属栏目:大数据 来源:网络整理
导读:我有Delphi 2007代码看起来像这样: procedure WriteString(Stream: TFileStream; var SourceBuffer: PChar; s: string);begin StrPCopy(SourceBuffer,s); Stream.Write(SourceBuffer[0],StrLen(SourceBuffer));end; 我这样称呼: var SourceBuffer : PChar;
我有Delphi 2007代码看起来像这样:
procedure WriteString(Stream: TFileStream; var SourceBuffer: PChar; s: string); begin StrPCopy(SourceBuffer,s); Stream.Write(SourceBuffer[0],StrLen(SourceBuffer)); end; 我这样称呼: var SourceBuffer : PChar; MyFile: TFileStream; .... SourceBuffer := StrAlloc(1024); MyFile := TFileStream.Create('MyFile.txt',fmCreate); WriteString(MyFile,SourceBuffer,'Some Text'); .... 这在Delphi 2007中有效,但在Delphi 2010中给了我很多垃圾字符.我知道这是由于unicode合规性问题,但我不知道如何解决这个问题. 这是我迄今为止所尝试的: >更改数据类型 我究竟做错了什么? 解决方法
您不需要单独的缓冲区来将字符串写入流.可能最简单的方法是将字符串编码为UTF8,如下所示:
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; 我已经将TStreamEx声明为TStream的类帮助器,但是将其重写为一个独立的过程和函数,就像你的例子不是太难了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |