文件大小

问题描述:

我只是想找到的Çprogram..I写代码的帮助下,文件大小,但它给错误的结果...文件大小

fseek(fp,0,SEEK_END); 
osize=ftell(fp); 

有没有其他办法?

+2

你是什么意思“错误的结果”?你得到了什么,你期望什么,为什么你期望它?另外,你是如何打开文件的? – 2011-04-22 16:07:24

+0

您是否以二进制模式打开文件? – 2011-04-22 16:10:22

+0

@David:我认为这是一个文本模式/二进制模式问题。 – Mehrdad 2011-04-22 16:10:42

系统调用stat是解决此问题的常用方法。或者,在您的具体情况下,fstat

尝试使用_filelength。这不是便携式的,但是...我不认为有任何完全便携的方式来做到这一点。

+0

_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()

+0

stat的定义或stat的主体包含哪些内容? – Sujoy 2011-04-22 16:21:10

+0

@Sujoy ::查看编辑。顺便说一句,你没有告诉你的文件的大小,只需右键单击它并检查属性。 – Sadique 2011-04-22 16:25:33

试试这个使用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);