我虽要用合并三个文件,第一个和第三个是文本信息.中间一个文件是二进制文件.
不知怎么实现.
在试验过程中,我只是合并两个文本文件,结果后面的文件出现乱码.不知如体处理,以下是我的代码.
我知道用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;
不知怎么实现.
在试验过程中,我只是合并两个文本文件,结果后面的文件出现乱码.不知如体处理,以下是我的代码.
我知道用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;
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中的数据
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