如何将某一文件读到流中,然后再从流中写回文件呢?(100分)

  • 主题发起人 主题发起人 mayi
  • 开始时间 开始时间
M

mayi

Unregistered / Unconfirmed
GUEST, unregistred user!
我已经实现从文件读取到流中,但从流中再生成另一个文件时,生成的文件老是出错,如何解决?
我现在的方法是:将一个文件读到memostrea中,并显示在memo中,然后从memo转成memostrea
,生成另外一个文件,生成的文件出错。
 
var
stm1, stm2: TFileStream;
begin
stm1 := TFileStream.Create('C:/aaa.txt', fmOpenRead or fmShareDenyNone);
stm2 := TFileStream.Create('D:/bbb.txt', fmCreate);
stm2.copyfrom(stm1);
stm1.free;
stm2.free;
end;
 
你新生成的文件类型和原来的一样吗?如果不一样,可能不行。
比如:
f1:=TFilestream.create('c;/1.txt',fmopenread);
f2:=TFilestream.create('c:/tt.chm',fmcreate);
f2.copyfrom(f1,f1.size);
f1.free;
f2.free;
我保证你的tt.chm文件打不开,因为文件头格式根本就不是chm格式。
 
不是这样的,我要的是把任意文件通过流读到memo中,然后从memo中再转成stream,最后
再保存为另外一个文件,这个过程如何实现?最好是文本类型以外的文件。
 
奥,对不起,我理解错了。
这样就好了:
procedure TForm1.Button2Click(Sender: TObject);
var
f1,f2:TFilestream;
begin
f1:=TFilestream.create('c;/1.txt',fmopenread);
f2:=TFilestream.create('c:/tt.cc',fmcreate); //这里的文件名你可以随便定
Memo1.Lines.LoadFromStream(f1);
Memo1.Lines.SaveToStream(f2);
f1.free;
f2.free;
end;
 
var
ams: TMemoryStream;
begin
ams := TMemoryStream.Create;
try
ams.LoadFromFile('a.txt');
memo1.Lines.LoadFromStream(ams);
ams.SaveToFile('b.txt');
finally
ams.Free;
end;
end;
 
---->>>我要的是把任意文件通过流读到memo中,然后从memo中再转成stream,最后
---->>>再保存为另外一个文件
不可能。 除非是文本文件。
不然读入memo之后数据就被改掉了。 如果文件中包含#0, 那么所有#0之后的内容都会被memo截掉。 另外一些字符也会被memo忽略(比如响铃字符, ESC字符等等)
 
如果是这样的话,我换个做法:我想把任意一个文件的内容读出来,保存到一个数据库中,
然后再从数据库中读出来,生成另外一个文件,这个过程如何实现?或有什么其它的建议?
 
假设你的数据表中有一Blob型字段Myblob
f:=TFileStream.create('c:/a.doc',fmopenread);
b:=Tblobstream.cteate(table1Myblob,bmwrite);
b.copyfrom(f,f.size);
f.free;
b.free;
这样就保存到了数据库中。
从数据库中读出来与此类似!
 
其实读到MEMO也无所谓,只保存时,不要用MEMO的保存机制.
采用一个中间流,MEMO只做显示用。
如果你要在MEMO里改东西,再存,这样肯定不可以。原理楼上兄弟说明白了。
 
后退
顶部