我写了一个简单的函数,用于获取文件的大小。
int file_size( char * filename )
{
int size;
struct stat st;
stat( filename, &st );
size = st.st_size;
return size;
}//file_size
这个代码能够正常工作,但是如果有一个文件的大小超过4GB,那么我会得到一个负数返回,而这显然不是正确的文件大小。那么我该如何获得如此大的文件大小呢?我认为返回值应该是一些其他的东西,比如int,但我不知道具体是什么,而且我也不认为这会解决我的问题。
谢谢,
kampi
更新:
嗨!
我找到了解决方法。我必须使用 __stat64。我修改了我的函数,现在它能够检索真正的文件大小。我用一个8GB的大文件测试了一下。
unsigned long long int file_size( char * filename )
{
unsigned long long int size;
struct __stat64 st;
__stat64( filename, &st );
size = st.st_size;
return size;
}//file_size
还有一个注意事项:
当我使用printf时,必须使用"%I64d"才能打印出它。
int
更改为off_t
,或者如果不可用,则更改为size_t
,那会怎样呢?这两种情况都适用于size
的返回类型和声明。 - Alok Singhal