procedure TForm1.Button1Click(Sender: TObject);
var
  fStream: TFileStream;
  S: String;
  aLen, bLen: Integer;
begin
  fStream := TFileStream.Create('e:\\tt.dt', fmShareDenyNone);
  fStream.Position := 20480;  S := 'TransFile|2440120|';
  aLen := Length(S);  bLen := 1024;  SetLength(buf, aLen+bLen);
  Move(PChar(S)^, buf[0], aLen);
  fStream.ReadBuffer(buf[0], bLen);
end;
主要是最下面两行:
(1) Move(PChar(S)^, buf[0], aLen);      //将字符串S的内容保存至buf中
(2) fStream.ReadBuffer(buf[0], bLen);   //将fStream读取1024字节,保存至buf中
但buf中数据不正确,请问哪里出问题了?

解决方案 »

  1.   

    Move(PChar(S)^, buf[0], aLen);
    这句,buf是个什么数组,看样子应该是个字符串数组吧?pchar(S)^这么写什么意思,直接写s不就得了,这里的长度不是指alen,是指s在内存中的长度,字符串是个指针所以是4字节长,这样写
    move(s,buf[0],4)或move(s,buf[0],sizeof(s))
      

  2.   

    buf是啥类型,Move(s[1],buf[0],alen)
      

  3.   

    一看就知道错在哪了procedure TForm1.Button1Click(Sender: TObject);
    var
      fStream: TFileStream;
      S: String;
      aLen, bLen: Integer;
    begin
      fStream := TFileStream.Create('e:\\tt.dt', fmShareDenyNone);
      fStream.Position := 20480;  S := 'TransFile|2440120|';
      aLen := Length(S);  bLen := 1024;  SetLength(buf, aLen+bLen);
      Move(PChar(S)^, buf[0], aLen);
      fStream.ReadBuffer(buf[4], bLen); 
    end;
    fStream.ReadBuffer(buf[4], bLen); 
    这个写4, 怎么能写0呢... - -!
      

  4.   

    4?
    为什么是4呢?
    呵呵
    应该是
    fStream.ReadBuffer(buf[aLen - 1], bLen); 
      

  5.   

    (1) Move(PChar(S)^, buf[0], aLen); //将字符串S的内容保存至buf中
    这句话是正确的,当然也可以换作Move(S[1], buf[0], aLen);问题是出在下面这句:
    (2) fStream.ReadBuffer(buf[0], bLen); //将fStream读取1024字节,保存至buf中应该是fStream.ReadBuffer(buf[aLen-1], bLen); 
    呵呵,谢谢大家了!
      

  6.   

    不过正确的答案应该是fStream.ReadBuffer(buf[aLen], bLen);