procedure TForm1.Button1Click(Sender: TObject);
var
          strmSource,strmDest:TMemoryStream;
          f1, f2:string;
        begin
f1 := 'c:\a.txt';
f2 := 'c:\b.txt';
          //先读f1
          strmSource:=TMemoryStream.Create;
          strmSource.loadfromfile(f1);
          //拷贝到strmdest
          strmDest:=TMemoryStream.Create;
          strmDest.copyfrom(strmSource,strmSource.size);
          strmSource.clear;
          //再读f1
          strmSource.loadfromfile(f2);
          //拷贝到strmdest
          strmDest.seek(strmDest.size,soFromBeginning);
          strmDest.copyfrom(strmSource,strmSource.size);
          strmSource.free;
          //这时strmDest里面便是两个文件合并后的内容了.将它保存为文件
          strmDest.SaveToFile('c:\ab.txt');
          strmDest.free;
        end;
procedure TForm1.Button2Click(Sender: TObject);
var
          strmSource,strmDest:TMemoryStream;
          f1, f2:string;
        begin
f1 := 'c:\a.txt';
f2 := 'c:\b.txt';
          //先读f1
          strmSource:=TMemoryStream.Create;
          strmSource.write(f1[1], length(f1));
          //拷贝到strmdest
          strmDest:=TMemoryStream.Create;
          strmDest.copyfrom(strmSource,strmSource.size); //*********这里出现读错误, 何解?
          strmSource.clear;
          //再读f1
          strmSource.write(f2[1], length(f2));
          //拷贝到strmdest
          strmDest.seek(strmDest.size,soFromBeginning);
          strmDest.copyfrom(strmSource,strmSource.size);
          strmSource.free;
          //这时strmDest里面便是两个文件合并后的内容了.将它保存为文件
          strmDest.SaveToFile('c:\ab.txt');
          strmDest.free;
        end;
end.

解决方案 »

  1.   

    var
      strmSource,strmDest:TMemoryStream;
      f1, f2:string;
    begin
      f1 := 'c:\a.txt';
      f2 := 'c:\b.txt';
              //先读f1
      strmSource:=TMemoryStream.Create;
      strmSource.write(f1[1], length(f1));
      //拷贝到strmdest
      strmSource.Position := 0;  //加上这句  strmDest:=TMemoryStream.Create;
      strmDest.copyfrom(strmSource,strmSource.size); //*********这里出现读错误, 何解?
      strmSource.clear;
      //再读f1
      strmSource.write(f2[1], length(f2));  strmSource.Position := 0;  //还有这句
      //拷贝到strmdest
      strmDest.seek(strmDest.size,soFromBeginning);
      strmDest.copyfrom(strmSource,strmSource.size);
      strmSource.free;
      //这时strmDest里面便是两个文件合并后的内容了.将它保存为文件
      strmDest.SaveToFile('c:\ab.txt');
      strmDest.free;
    end;
      

  2.   

    呵呵,原来load的时候自动设置位置的啊,
    procedure TMemoryStream.LoadFromStream(Stream: TStream);
    var
      Count: Longint;
    begin
      Stream.Position := 0;
      Count := Stream.Size;
      SetSize(Count);
      if Count <> 0 then Stream.ReadBuffer(FMemory^, Count);
    end;