g*****u 发帖数: 298 | 1 long size;
fseek (f, 0, SEEK_END );
size = ftell(f);
在windows下用VC编译,加入了编译选项-D_FILE_OFFSET_BITS=64, 可是超过2G的文件
得不到正确大小。应该怎么写?
那些带64的函数版本是POSIX C标准里的么?VC的C库没有。在GNU C下,是不是编译的
时候加入大文件选项,fseek就是fseek64?
还有,我用循环每次读一个字符
while( !feof(f) )
{
ch = fgetc(f);
count++;
}
最后count的结果比用上面fseek的出来的结果小,不同结果小的不一样,有的差2,有
的差十好几,这是怎么回事? |
c*****t 发帖数: 1879 | 2 I guess that you may have to write your own macros to deal with
cross platform issues since long is usually only 32-bit on 32-bit
machines. Or maybe consider using autoconf.
MinGW has
_CRTIMP __int64 __cdecl __MINGW_NOTHROW _ftelli64 (FILE*);
VS9:
_Check_return_ _CRTIMP __int64 __cdecl _ftelli64(_Inout_ FILE * _
File);
SunOs 5.1:
extern off64_t ftello64(FILE *);
【在 g*****u 的大作中提到】 : long size; : fseek (f, 0, SEEK_END ); : size = ftell(f); : 在windows下用VC编译,加入了编译选项-D_FILE_OFFSET_BITS=64, 可是超过2G的文件 : 得不到正确大小。应该怎么写? : 那些带64的函数版本是POSIX C标准里的么?VC的C库没有。在GNU C下,是不是编译的 : 时候加入大文件选项,fseek就是fseek64? : 还有,我用循环每次读一个字符 : while( !feof(f) ) : {
|
g*****u 发帖数: 298 | 3 谢谢!我从哪里能统一查到这些函数?它们都是posix C标准中的么?
还有,为什么fseek得到的大小和循环计数的出来的不一样呢?在GCC下,fseek出来的
值比循环计数的小1,但是VC的就没准,这是什么问题? |
t****t 发帖数: 6806 | 4 C FAQ, 12.2
【在 g*****u 的大作中提到】 : 谢谢!我从哪里能统一查到这些函数?它们都是posix C标准中的么? : 还有,为什么fseek得到的大小和循环计数的出来的不一样呢?在GCC下,fseek出来的 : 值比循环计数的小1,但是VC的就没准,这是什么问题?
|
l*****a 发帖数: 2 | 5 可是我的问题是循环得到的count比fseek的小,而不是大啊。这是VC的C编译出来的,
不同编译器结果不确定,GCC出来的就是循环得到的count比fseek的大1。 |
b****o 发帖数: 403 | |