各位看官:
    我想测试以上两个例程的用法,所以程序功能可能并无用处或有其他解决方法,我只想知道为什么用以下方法不能成功。
    功能描述:将文本文件A中的数据拷贝到文本文件B。
    我的想法:用ReadBuffer写入Buffer,在将Buffer数据存入文本文件B。使用TFileStream对象实现功能。
    报错描述:产生EWriteError错误。
    程序代码://在TMainForm窗体中点击按钮Direct1时发生以下代码描述的事件
procedure TMainForm.Direct1Click(Sender: TObject);
var
  ReadStrm, WriteStrm : TFileStream;
  Buffer : PChar;
  intSize : Integer;
begin
  ReadStrm := TFileStream.Create('ReadFile.xkl', fmOpenRead);
  WriteStrm := TFileStream.Create('WriteFile.xkl', fmCreate);
  intSize := ReadStrm.Size;
  ReadStrm.Position := 0;
  WriteStrm.Position := 0;
  //采用直接复制法可以实现拷贝功能
  //WriteStrm.CopyFrom(ReadStrm, ReadStrm.Size);  //采用间接复制法,却报EWriteError错误
  GetMem(Buffer, intSize);
  ReadStrm.ReadBuffer(Buffer, intSize);
  WriteStrm.WriteBuffer(Buffer^, intSize);
  FreeMem(Buffer);
  FreeAndNil(ReadStrm);
  FreeAndNil(WriteStrm);
end;

解决方案 »

  1.   

    procedure TForm1.Button3Click(Sender: TObject);
    var
      ReadStrm, WriteStrm : TFileStream;
      Buffer : PChar;
      intSize : Integer;
    begin
      ReadStrm := TFileStream.Create('c:\csb.log', fmOpenRead);
      WriteStrm := TFileStream.Create('c:\a.txt', fmCreate);
      intSize := ReadStrm.Size;
      ReadStrm.Position := 0;
      WriteStrm.Position := 0;
      //采用直接复制法可以实现拷贝功能
      //WriteStrm.CopyFrom(ReadStrm, ReadStrm.Size);  //采用间接复制法,却报EWriteError错误
      GetMem(Buffer, intSize);
      ReadStrm.ReadBuffer(Buffer^, intSize);  //Buffer^, 而非Buffer
      WriteStrm.WriteBuffer(Buffer^, intSize);
      FreeMem(Buffer);
      FreeAndNil(ReadStrm);
      FreeAndNil(WriteStrm);
      

  2.   

    WriteStrm.WriteBuffer(Buffer^, intSize);
    改成
    WriteStrm.WriteBuffer(@Buffer^, intSize);
      

  3.   

    各位看官:
        实践证明,meiqingsong(阿飛) 的写法是正确的,而bee2518(迷茫ing)的写法将产生新的错误。非常感谢两位的热心。