文件大小
系统调用stat
是解决此问题的常用方法。或者,在您的具体情况下,fstat
。
尝试使用_filelength。这不是便携式的,但是...我不认为有任何完全便携的方式来做到这一点。
_filelength不适用于文件指针。但是,你总是可以这样做:size = _filelength(_fileno(fp)); – 2012-09-20 10:31:25
没有理由不工作。
还有别的办法吗? 您可以使用统计,如果你知道文件名:
struct stat st;
stat(filename, &st);
size = st.st_size;
顺便说一句ftell返回long int
的sys/stat.h头定义了功能fstat()
,lstat()
返回的数据结构,并stat()
。
试试这个使用fstat()
:
int file=0;
if((file=open(<filename>,O_RDONLY)) < -1)
return -1; // some error with open()
struct stat fileStat;
if(fstat(file,&fileStat) < 0)
return -1; // some error with fstat()
printf("File Size: %d bytes\n",fileStat.st_size);
FTELL返回一个int。如果你在一个int值为32位而你的文件大于2GB的系统上,你可能会得到一个负值。 POSIX提供了使用off_t的ftello和fseeko。 C有fgetpos和fsetpos,它们使用fpos_t - 但fpos_t不是一种算术类型 - 例如,它通过语言环境保留与charset处理相关的内容。
如果发生错误,ftell
唯一的负值返回值为-1L。如果您不介意使用WinAPI,请使用GetFileSizeEx
获取文件大小:
HANDLE hFile = CreateFile(filename,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
LARGE_INTEGER size;
GetFileSizeEx(hFile, &size);
printf("%ld", size.QuadPart);
CloseHandle(hFile);
你是什么意思“错误的结果”?你得到了什么,你期望什么,为什么你期望它?另外,你是如何打开文件的? – 2011-04-22 16:07:24
您是否以二进制模式打开文件? – 2011-04-22 16:10:22
@David:我认为这是一个文本模式/二进制模式问题。 – Mehrdad 2011-04-22 16:10:42