TMemoryStream(50分)

  • 主题发起人 主题发起人 delphifaq
  • 开始时间 开始时间
D

delphifaq

Unregistered / Unconfirmed
GUEST, unregistred user!
将一个文件的数据读入TMemoryStream中,请问如果想从TMemoryStream中Cut掉一部分数据<br>怎么实现,如果从一处CUT然后再PASTE在另一处,怎么实现,请举例示之。
 
以RichEdit为例,可以这样实现Cut和Paste<br>procedure SaveAndLoad;<br>var M_Stream: TMemoryStream;<br>begin<br>&nbsp; M_Stream:=TMemoryStream.Create;<br>&nbsp; RichEdit1.Lines.SaveToStream(M_Stream);<br>&nbsp; M_Stream.Position:=0;<br>&nbsp; RichEdit2.Lines.LoadFromStream(M_Stream);<br>&nbsp; M_Stream.Destroy;<br>end;<br>至于Cut掉一部分,我还没试过。
 
借助Tstrings对象.
 
应该建立一个临时的TMemoryStream,<br>然后用使用Position属性和CopyFrom方法,<br>其中Position属性负责移动位置,CopyFrom负责拷贝指定长度的内容。<br>例如:一个文件aaa.txt长度为4000byte, 将其调入一个TMemoryStream,然后要cut调其中<br>1000-1999的数据,步骤如下:<br>var<br>&nbsp; ms1,ms2:TMemoryStream;<br>begin<br>&nbsp; ms1:=TMemoryStream.Create;<br>&nbsp; ms2:=TMemoryStream.Create;<br>&nbsp; ms1.LoadFromFile('aaa.txt');<br>&nbsp; ms1.Position:=0; &nbsp; &nbsp; &nbsp;//ms1位置移动到开始<br>&nbsp; ms2.CopyFrom(ms1,1000); //取前1000个字节<br>&nbsp; ms1.Position:=2000; &nbsp; //ms1位置移动到2000处<br>&nbsp; ms2.CopyFrom(ms1,2000); &nbsp;//取后2000个字节<br>&nbsp; ms2.free;<br>&nbsp; ms1.free;<br>end;<br>这里得到的ms2就是ms1中cat掉第1000-1999数据的结果。
 
关键是只要你知道在什么地方CUT就一点都不难!
 
多人接受答案了。
 
后退
顶部