我虽要用合并三个文件,第一个和第三个是文本信息.中间一个文件是二进制文件.
不知怎么实现.
在试验过程中,我只是合并两个文本文件,结果后面的文件出现乱码.不知如体处理,以下是我的代码.
我知道用cmd的copy命令可以实现,但我想知道我这种对流的操作方式错在哪里?为什么会乱码?
procedure TForm1.Button3Click(Sender: TObject);
var
m1,m2:TmemoryStream;
fm:Tfilestream;
begin
  m1:=TmemoryStream.create;
  m2:=TmemoryStream.create;
  try
  m1.LoadFromFile('c:\1.txt');
  m2.LoadFromFile('c:\2.txt');
  m1.Seek(0,sofromend);
  m1.Write(m2,m2.size);
  m1.SaveToFile('c:\3.txt');
  finally
  m1.Free;
  m2.free;
  end;

解决方案 »

  1.   

    var
      M1, M2: TMemoryStream;
    begin
      M1 := TMemoryStream.Create;
      M2 := TMemoryStream.Create;
      try
        M1.LoadFromFile('c:\1.txt');
        M2.LoadFromFile('c:\2.txt');
        M1.Seek(0, soFromEnd);
        M1.Write(M2.Memory^, M2.Size);
        M1.SaveToFile('c:\3.txt');
      finally
        M1.Free;
        M2.free;
      end;
    end;
    //function TMemoryStream.Write(const Buffer; Count: Longint): Longint;
    //第一个参数是写入文件的内容~~
    //m1.Write(m2,m2.size);就是把m2这个对象写到文件中,而不是m2中的数据
      

  2.   

    有个例子,你可以看看
    var 
    strmSource,strmDest:TMemoryStream; 
    begin 
    //先读f1 
    strmSource:=TMemoryStream.Create; 
    strmSource.loadfromfile('C:\xxx.exe'); 
    //拷贝到strmdest 
    strmDest:=TMemoryStream.Create; 
    strmDest.copyfrom(strmSource,strmSource.size); 
    strmSource.clear; 
    //再读f2 
    strmSource.loadfromfile('C:\xx.exe'); 
    //拷贝到strmdest 
    strmDest.seek(strmDest.size,soFromBeginning); 
    strmDest.copyfrom(strmSource,strmSource.size); 
    strmSource.free; 
    //这时strmDest里面便是两个文件合并后的内容了.将它保存为文件 
    strmDest.SaveToFile('xxxxxxx.exe'); 
    strmDest.free; 
    end; 
    ------------------------------------
    心中多少的创伤,不可抵挡的空虚,卑躬屈膝的一生,今天只想冲出那枷锁,就要象狂人,金属者---金属狂人
    ------------------------------------
    《CSDN论坛新助手 CSDN's forum Explorer》,支持最新改版论坛,回复、浏览“方便”,“快捷”!
    下载地址:http://www.seeyou.com.cn/CoolSlob/CSDNExplorer.exe