var
  stream:TFileStream;
  Buffer: Pointer;
  size:integer;
  fn:String;
begin
  fn:='e:\001.dat';
  if FileExists(fn) then begin
    Stream := TFileStream.Create(fn, fmOpenReadWrite or fmShareExclusive);
    size:=stream.Size;
    if Size>=10 then begin
      size := size - 10;
      if size>0 then begin
        getmem(buffer,size);
        stream.Seek(10,soBeginning);
        stream.Read(buffer^,size);
      end;      stream.Seek(10,soBeginning);
      stream.Write('III',3);
      if size>0 then begin
        stream.Write(buffer^,size);
        freemem(buffer);
      end;
    end;
    stream.Free;
  end;
end;

解决方案 »

  1.   

    kiboisme    运行结果还是不对
      

  2.   

    为了方便测试,我把001.dat里的数据内容改为
    1234567890abcdefg运行程序之后结果却变成
    1234䥉㕉㘀㜀㠀㤀 愀戀挀搀攀昀最
      

  3.   

    分别先把文件前10字节和10字节之后的内容读到两个memorystrem,mem1,mem2: TMemoryStream;
    然后:
      将你要插入的内容写入到mem1的末位,然后将mem2的内容全部写入到mem1的末尾,然后调用mem1.savetofile保存到磁盘。
      

  4.   

    Delphi 哪个版本? 留意字符串默认的Unicode格式
      

  5.   

    Delphi的版本是D7
    操作系统是XP
    应该不是Unicode的问题吧,测试的时候,里边全都是数字和字母没有UNICODE字符呀
      

  6.   

    unicode字符串用两个字节来保存一个字符,不管字符串内容是什么var
     wc:WideChar;
     ac:AnsiChar;
    begin
     wc:= 'A';
     ac:= 'A';
     sizeof(wc); // 2
     sizeof(ac); // 1
    end;
      

  7.   

    从5开始出错,你这不是UNICODE问题是什么……
    最简单的方法,你新建一个文本文件,然后另存为一个001.dat,注意下面有个编码,选择为ANSI,然后用这个文件测试看看。
      

  8.   

    如果是UNICODE的问题应该怎么修改才对啊
      

  9.   

    的确这种可能性是文件用的是UniCode规则,导致出现了这种乱码;