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中数据不正确,请问哪里出问题了?
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中数据不正确,请问哪里出问题了?
这句,buf是个什么数组,看样子应该是个字符串数组吧?pchar(S)^这么写什么意思,直接写s不就得了,这里的长度不是指alen,是指s在内存中的长度,字符串是个指针所以是4字节长,这样写
move(s,buf[0],4)或move(s,buf[0],sizeof(s))
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呢?
呵呵
应该是
fStream.ReadBuffer(buf[aLen - 1], bLen);
这句话是正确的,当然也可以换作Move(S[1], buf[0], aLen);问题是出在下面这句:
(2) fStream.ReadBuffer(buf[0], bLen); //将fStream读取1024字节,保存至buf中应该是fStream.ReadBuffer(buf[aLen-1], bLen);
呵呵,谢谢大家了!