处理大数据,读写大于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位了