向TFileStream写入字符出现三个乱码,求排查操作错误原因
TFileStream写入字符出现乱码的问题解决
你的问题出在直接传递AnsiString变量给Write方法:Delphi的AnsiString是带内部管理结构的(包含引用计数、字符串长度等),你传入sss时,实际传递的是这个管理结构的指针,写入的3个字节是结构的头部数据,而非字符串的实际内容,所以出现乱码。
另外S.Position := S.Size这行是多余的——fmCreate模式创建的文件默认指针就在起始位置,且文件为空,这行操作没有意义。
修正后的代码:
var sss: AnsiString; S : TFileStream; begin S := TFileStream.Create(FileName, fmCreate); try sss := '444'; // 传入字符串实际内容的指针,用Length获取准确长度 S.WriteBuffer(PAnsiChar(sss)^, Length(sss)); finally // 用try-finally确保流资源被释放 S.Free; end; end;
补充说明:
- 用
WriteBuffer替代Write:前者会保证请求的所有字节都被写入,后者仅返回实际写入的字节数,在异常场景下可能写入不完整。 - 用
Length(sss)代替硬编码的3:当字符串内容变化时,无需手动修改长度值,避免出错。 - 包裹try-finally块:防止代码执行异常时,流对象未被释放导致资源泄漏。
内容的提问来源于stack exchange,提问作者vico
相关产品推荐
相关产品推荐

