You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:50:28