如何打开几百M的文件?(1分)

  • 主题发起人 主题发起人 lah998
  • 开始时间 开始时间
L

lah998

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么小文件能打开,大文件就不能打开,报告扩大内存出错!请各位给我出出主意,想什么办法?
最好付上代码,先谢了!
procedure TForm1.Button1Click(Sender: TObject);
var
Source, Dest: TMemoryStream;
begin
Source := TMemoryStream.Create;
Dest := TMemoryStream.Create;
try
//我这个文件有540M. 报告扩大内存出错!
Source.LoadFromFile('c:/English.dat');//打开小文件就可以
finally
Source.Free;
Dest.Free;
end;
end;
 
內存多大?
 
rar为什么可以打开!
内存256M
 
你可以不用Delphi打開這個數據庫嗎?
 
我要压缩这个文件先要打开啊!
 
不是数据库!
 
你用内存流一次读入,肯定是有问题了,一般系统2000自己就要几百M内存, 不是有多少内存就可以读多少的,

你不会用file变量吗??
 
kkyy,:不会用file变量
 
var
f: file
//可以是file of Type(可以是Record类型, 也可以是其它数据类型)
begin
AssignFile(f, fileName);
Reset(f);
....
CloseFile(f);
end;
 
用file变量,用多少读多少,
用完了就关,可以解决此问题
 
用TFileStream也行,不过我不清楚TFileStream读取文件数据进内存的规则,应
该是64k吧,不过是哪一个范围呢,请大虾指点![8D]
 
TFileStream 没有限制啊,你愿意读多少进内存随便你自己。创建时一字节也不读。

不过对于这么大的文件,恐怕还是应该用文件映射。更快

 
你每次读一部分,处理完后再读一部分,如此循环
 
朋友们:一个文件只读它一部分怎么做!
 
老大,符了U
用内存映射
 
内存映射,哪里有资料下载?
 
FileRead FileSeek

var
Buf: array[1..1024] of Byte;
FHandle: Integer;
FSize: Int64;
begin
FHandle := FileOpen('Your File Name', fmOpenRead);
try
FSize := FileSeek(FHandle, 0, 2);
FileSeek(FHandle, 0, 0);
//读你的文件,用多少读多少,UltraEdit都是用多少读多少要不然几百M的文件咋读
FileRead(FHandle, Buf, SizeOf(Buf))

finally
FileClose(FHandle);
end;
end;
 
>>rar为什么可以打开!
因为Rar只要读入压缩包的文件头(肯定小于1M)以获得压缩包内部的文件结构,并不需要
将文件内容读出来。
说一说你的应用,我估计没有必要一次性读入的。

>>UltraEdit都是用多少读多少要不然几百M的文件咋读
很遗憾,我觉得UltraEdit是将文件全部读入内存的,所以对于几十兆以上的大文件,我从
来不敢用它打开,向来都是用我自己写的文件工具。
 
来自:天真, 时间:2002-12-15 13:50:00, ID:1511748
老大,符了U
用内存映射


|__________内存映射是个什么概念?tmemorystream or sth else? thanks
 
说起来就很简单,
就是读取该文件的指针,然后,你就可以根据该指针读数据
具体可以看D5开发人员指南:)
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部