問題描述:
在使用c語言獲取文件大小的時候發現有的文件大小可以正確獲取,有的不能,以下爲初始代碼
unsigned long get_file_size(const char *filename)
{
unsigned long size;
FILE* fp = fopen( filename, "rb" );
if(fp==NULL)
{
printf("ERROR: Open file %s failed.\n", filename);
return 0;
}
fseek( fp, SEEK_SET, SEEK_END );
size=ftell(fp);
fclose(fp);
return size;
}
後來發現標準C的文件操作函數不支持對超過2G的文件讀取。
解決辦法:
使用stat函數可以正確獲取到超大文件的狀態信息
unsigned long get_file_size(const char *filename)
{
struct stat buf;
if(stat(filename, &buf)<0)
{
return 0;
}
return (unsigned long)buf.st_size;
}