32位Windows和2GB文件大小限制(C与fseek和ftell)
发布时间:2020-12-13 20:35:09 所属栏目:Windows 来源:网络整理
导读:我试图将一个小型数据分析程序从64位UNIX移植到32位Windows XP系统(不要问:)). 但是现在我遇到了2GB文件大小限制的问题(在这个平台上长时间不是64位). 我搜索了这个网站和其他人可能的解决方案,但找不到任何可以直接翻译我的问题. 问题在于使用fseek和ftell.
我试图将一个小型数据分析程序从64位UNIX移植到32位Windows XP系统(不要问:)).
但是现在我遇到了2GB文件大小限制的问题(在这个平台上长时间不是64位). 我搜索了这个网站和其他人可能的解决方案,但找不到任何可以直接翻译我的问题. 有没有人知道对以下两个函数的修改,使它们可以在32位Windows XP上运行大于2GB的文件(实际上订购100GB). 至关重要的是,nsamples的返回类型是64位整数(可能是int64_t). long nsamples(char* filename) { FILE *fp; long n; /* Open file */ fp = fopen(filename,"rb"); /* Find end of file */ fseek(fp,0L,SEEK_END); /* Get number of samples */ n = ftell(fp) / sizeof(short); /* Close file */ fclose(fp); /* Return number of samples in file */ return n; } 和 void readdata(char* filename,short* data,long start,int n) { FILE *fp; /* Open file */ fp = fopen(filename,"rb"); /* Skip to correct position */ fseek(fp,start * sizeof(short),SEEK_SET); /* Read data */ fread(data,sizeof(short),n,fp); /* Close file */ fclose(fp); } 我尝试使用_fseeki64和_ftelli64使用以下代码替换nsamples: __int64 nsamples(char* filename) { FILE *fp; __int64 n; int result; /* Open file */ fp = fopen(filename,"rb"); if (fp == NULL) { perror("Error: could not open file!n"); return -1; } /* Find end of file */ result = _fseeki64(fp,(__int64)0,SEEK_END); if (result) { perror("Error: fseek failed!n"); return result; } /* Get number of samples */ n = _ftelli64(fp) / sizeof(short); printf("%I64dn",n); /* Close file */ fclose(fp); /* Return number of samples in file */ return n; } 对于4815060992字节的文件,我得到260046848个样本(例如_ftelli64给出520093696字节),这很奇怪. 奇怪的是,当我在_fseeki64的调用中省略(__int64)强制转换时,我得到一个运行时错误(无效的参数). 有任何想法吗?
有两个名为_fseeki64和_ftelli64的函数,即使在32位Windows上也支持更长的文件偏移量:
int _fseeki64(FILE *stream,__int64 offset,int origin); __int64 _ftelli64(FILE *stream); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Windows 8共享目标与JQuery崩溃
- Windows中的signal.alarm替换[Python]
- windows – 运行bat文件后保持命令窗口打开
- windows – 如何确定Win7被激活的密钥类型(零售或批量许可证
- windows – 检查目录的正确方法可用于写入
- windows – 在Visual Basic 6中访问动态加载的DLL(使用Load
- windows-server-2012-r2 – 用户文件夹被重命名为“我的文档
- 使用anaconda安装tensorflow (windows10环境)
- wpf – 企业应用程序如何适合Metro风格(WinRT)UI?
- winapi – Windows内核中可能的最大文件名长度