在文件后写入一个字符串后保存,并且能再次分离出字符串和原文件。  
 
如:  在1.exe文件后写入123456789,另存为2.exe,读取2.exe,把2.exe文件还原为1.exe和符串123456789.  
 
procedure  TForm1.Button1Click(Sender:  TObject);    //在文件尾写入strPsw  
var  MStream:TMemoryStream;  
 
begin  
       MStream:=TMemoryStream.Create;  
       Mstream.LoadFromFile(edit1.Text);  
       Mstream.Seek(0,soFromEnd  );  
       Mstream.Write(strPsw,length(strPsw));  
       Mstream.SaveToFile(edit2.Text);  
       Mstream.Free;  
end;  
 
procedure  TForm1.Button2Click(Sender:  TObject);    //分离出文件,并且读取写入strPSw  
var  MStream:TMemoryStream;  
       Mstream2:TmemoryStream;  
       buf:string;  
       iSize:integer;  
begin  
       MStream:=TMemoryStream.Create;  
       Mstream2:=TMemoryStream.Create;  
       Mstream.LoadFromFile(edit2.Text);  
       mstream.Position:=0;  
 
       iSize:=  length(strPsw);  
       iSize:=mstream.Size-length(strPsw)  ;  
       Mstream2.CopyFrom(mstream,iSize);  
       mstream2.SaveToFile(edit2.Text+'a');  
 
       Mstream.Seek(-length(strPsw),soFromEnd  );  
       mstream.Read(buf,length(strPsw));  
       Edit4.Text:=buf;  
 
       mstream.free;  
       MSTREAM2.free;  
 
end;  
 
 
但这段代码好像不稳定,而且在mstream2.free时还会报错,  
给我一段稳定的代码,一定要稳定啊,

解决方案 »

  1.   

    老大,对于创建和释放对象要先创建后释放,后创建先释放
    对于这个过程可以如下来写]MStream:=TMemoryStream.Create;  
    try
       Mstream2:=TMemoryStream.Create;  
       try
         Mstream.LoadFromFile(edit2.Text);  
         mstream.Position:=0;  
     
         iSize:=  length(strPsw);  
         //把程序1的长度写到一个CONST变量中,在此处使用
         iSize:=mstream.Size-length(strPsw)  ;  
         Mstream2.CopyFrom(mstream,iSize);  
         mstream2.SaveToFile(edit2.Text+'a');  
         Mstream.Seek(-length(strPsw),soFromEnd  );  
         mstream.Read(buf,length(strPsw));  
         Edit4.Text:=buf;  
        finally
         mstream.free;  
        end;
    finally
       MSTREAM2.free;  
    end;