首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

处理大数据,读写大于4GB的文件,不要告诉小弟我用内存映射的方法

2012-09-21 
处理大数据,读写大于4GB的文件,不要告诉我用内存映射的方法;现在我要处理一组数据,总大小估计几十个G;现在

处理大数据,读写大于4GB的文件,不要告诉我用内存映射的方法;
现在我要处理一组数据,总大小估计几十个G;现在用的是FILE *rFile,fseek,ftell,fwrite但是当数据量到4G的时候,就再也写不进去了。不想用内存映射的方法,因为之后的已经全写完了,而且不知道内存映射之后文件的定位以及读写方法,能不能在现有的方法上改,对了,我用的是32位xp系统,vc6.0

[解决办法]
你可以自己定义一个数据空间,大致结构如下:
struct DataSpace{
int num; // 文件个数
__int64 size,pos,used; //数据空间大小、当前指向位置、已使用空间
 struct {
int id, //每个文件流序号
char **filename;//-- 文件流名称
int bufsize; // -- 每个文件大小
filestream *dat; // 文件流指针
} *data; //------ 数据空间存储说明 
当一个文件超出4G后,可以顺序下一个文件继续读写,通过对pos、size的读写,可以很方便的定位到相应的文件相应的位置。
[解决办法]
用ReadFile/WriteFile/SetFilePointer。SetFilePointer可以支持64位地址。
不過ReadFile/WriteFile一次只能讀/寫 4G以內的內容。
[解决办法]
弱弱的问一句,不能用文件映射吗?
[解决办法]
珍惜生命,远离VC6这个垃圾货。新的编译器都已经把fread/fwrite函数族更新到64位了

探讨
引用:
_fseeki64 _ftelli64 之类的函数操作


VC6.0无_fseeki64 _ftelli64函数

热点排行