29 个解决方案
#1
4G已经超过了int32能表示的最大范围,所以会出错。要用系统api来读了
#2
2楼正解
其实 fread/fwrite 是没问题的,主要是因为 fseek。
API SetFilePointer 可以支持大文件
如果是 VC,微软提供了 _fseeki64 来解决这个问题
其实 fread/fwrite 是没问题的,主要是因为 fseek。
API SetFilePointer 可以支持大文件
如果是 VC,微软提供了 _fseeki64 来解决这个问题
#4
_fseeki64,我一直不知道的说,这种时候我都是api了。
#5
4G怎么读?
超出32位了
超出32位了
#6
你可以用_fseeki64来seek,用fread来read,但是不可以一次性读>4G的内存,你可以读4G, seek一下,读下一个4G
#7
不过_fseeki64 VC6有么?那个时代普遍使用fat32,根本不支持4G以上文件……
#8
fseeko就可以了,POSIX.1-2001建议的函数,也算是个POSIX标准了
On many architectures both off_t and long are 32-bit types, but compilation with
#define _FILE_OFFSET_BITS 64
will turn off_t into a 64-bit type.
#include <stdio.h>
int fseeko(FILE *stream, off_t offset, int whence);
off_t ftello(FILE *stream);
On many architectures both off_t and long are 32-bit types, but compilation with
#define _FILE_OFFSET_BITS 64
will turn off_t into a 64-bit type.
#9
windows NT早就普遍ntfs了, ntfs可是在windows 3.x时就引入了
#11
很遗憾,我装了VC6,试过了,没有……stdio.h是这个头文件么?
#12
VS2008里有_fseeki64,但是也没有fseeko
#13
vs对posix标准支持度低,不是一两天的事情了
#14
VAssistX串版本了,VC6里_fseeki64可以自动完成,但是却找不到声明
#15
就在 <stdio.h> 里面阿
#16
VS2003/05/08都能找到声明,VC6不行……
#17
VC6 不清楚,
05/08 我知道肯定有的
#18
同情
#19
跟了一下, _fseeki64是调用SetFilePointer这个API实现的,vc6你就用 file api来做吧
#20
非常感谢楼上各位的回答,但是上面所说的_fseeki64 fseeko之类的函数,我的系统中一个都没有哦
#21
那你只好用一下系列函数咯:
CreateFile
ReadFile
SetFilePointer
WriteFile
CloseHandle
#22
直接用win32 api, CreateFile, SetFilePointer,ReadFile,CloseHandle
#23
注意获取文件长度的话,有高位和低位之分……也就是用两个unsigned int表示一个unsigned _int64
#24
看来也只能用API了,非常感谢楼上各位了。结贴给分,分不是很多,对不住大家了。
#25
分不在多,意思意思就可以。但很讨厌 0 分贴。
#26
.
#27
学习
#28
http://www.chkh.com/Article/HTML/24012.html
createfilemapping...4g以上注意一下技巧就好
createfilemapping...4g以上注意一下技巧就好
#29
在头文件里加入#define _LARGEFILE64_SOURCE
#1
4G已经超过了int32能表示的最大范围,所以会出错。要用系统api来读了
#2
2楼正解
其实 fread/fwrite 是没问题的,主要是因为 fseek。
API SetFilePointer 可以支持大文件
如果是 VC,微软提供了 _fseeki64 来解决这个问题
其实 fread/fwrite 是没问题的,主要是因为 fseek。
API SetFilePointer 可以支持大文件
如果是 VC,微软提供了 _fseeki64 来解决这个问题
#3
#4
_fseeki64,我一直不知道的说,这种时候我都是api了。
#5
4G怎么读?
超出32位了
超出32位了
#6
你可以用_fseeki64来seek,用fread来read,但是不可以一次性读>4G的内存,你可以读4G, seek一下,读下一个4G
#7
不过_fseeki64 VC6有么?那个时代普遍使用fat32,根本不支持4G以上文件……
#8
fseeko就可以了,POSIX.1-2001建议的函数,也算是个POSIX标准了
On many architectures both off_t and long are 32-bit types, but compilation with
#define _FILE_OFFSET_BITS 64
will turn off_t into a 64-bit type.
#include <stdio.h>
int fseeko(FILE *stream, off_t offset, int whence);
off_t ftello(FILE *stream);
On many architectures both off_t and long are 32-bit types, but compilation with
#define _FILE_OFFSET_BITS 64
will turn off_t into a 64-bit type.
#9
windows NT早就普遍ntfs了, ntfs可是在windows 3.x时就引入了
#10
#11
很遗憾,我装了VC6,试过了,没有……stdio.h是这个头文件么?
#12
VS2008里有_fseeki64,但是也没有fseeko
#13
vs对posix标准支持度低,不是一两天的事情了
#14
VAssistX串版本了,VC6里_fseeki64可以自动完成,但是却找不到声明
#15
就在 <stdio.h> 里面阿
#16
VS2003/05/08都能找到声明,VC6不行……
#17
VC6 不清楚,
05/08 我知道肯定有的
#18
同情
#19
跟了一下, _fseeki64是调用SetFilePointer这个API实现的,vc6你就用 file api来做吧
#20
非常感谢楼上各位的回答,但是上面所说的_fseeki64 fseeko之类的函数,我的系统中一个都没有哦
#21
那你只好用一下系列函数咯:
CreateFile
ReadFile
SetFilePointer
WriteFile
CloseHandle
#22
直接用win32 api, CreateFile, SetFilePointer,ReadFile,CloseHandle
#23
注意获取文件长度的话,有高位和低位之分……也就是用两个unsigned int表示一个unsigned _int64
#24
看来也只能用API了,非常感谢楼上各位了。结贴给分,分不是很多,对不住大家了。
#25
分不在多,意思意思就可以。但很讨厌 0 分贴。
#26
.
#27
学习
#28
http://www.chkh.com/Article/HTML/24012.html
createfilemapping...4g以上注意一下技巧就好
createfilemapping...4g以上注意一下技巧就好
#29
在头文件里加入#define _LARGEFILE64_SOURCE