用什么方法读取几十MB的16进制升级文件的全部数据?(80)

  • 主题发起人 主题发起人 生金菜
  • 开始时间 开始时间

生金菜

Unregistered / Unconfirmed
GUEST, unregistred user!
请教大家,用什么方法读取几十MB的16进制升级文件的全部数据?由于文件比较大,不能一次性把全部数据读出来,要分几次读取文件的数据,用什么函数读取?
 
内存映射
 
内存映射?我没有用过,请教下怎么用法
 
读文件嘛,就用var Txt:TextFile; s: string;begin//这个函数了。AssignFile(Txt, 'C:/text.hex');reset(Txt);while not eof(txt) dobegins := readln(Txt);end;end;
 
TMemoryStreamLoadFromFile?TFileStream?
 
直接对文件读取是不行的,因为文件太大了
 
怎么不行?我的办法,100M都可以读的,我亲自测试。我的办法,只是打开文件的,获得句柄,不是一次性读到内存中,你没有看到是用readLn读取的吗?每次也就读取几K的数据。
 
string 肯定不行, TFileStream比较靠谱若你不能处理文件其中的含有的0,可以用BASE64进行转换 tbase64encode, tbase64decode?
 
TMemoryStram.LoadFromFile(filename);
 
我在网上找到一个比较好的例子 FRFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead); FRFileSize := GetFileSize(FRFileHandle,Nil); FRMapHandle := CreateFileMapping (FRFileHandle,nil, PAGE_READONLY,0,FRFileSize,nil); MapFilePointer := MapViewOfFile(FRMapHandle,FILE_MAP_READ,0,0,FRFileSize); CopyMemory(@Sbuf1,Pointer(integer(MapFilePointer) + 0),3000);来自:http://topic.csdn.net/u/20080414/16/71f79f00-b0a1-4647-8e55-6c66b9ff479d.html
 
问题解决了
 
多人接受答案了。
 
后退
顶部