c程序中的文件大小

我只想在c程序的帮助下找到文件大小。我写了一个代码,但它给出了错误的结果……

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

还有别的办法吗?

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

ftell返回一个int。 如果您使用的是int为32位且文件大于2GB的系统,则最终可能会出现负值。 POSIX提供了使用off_t的ftello和fseeko。 C有fgetpos和fsetpos使用fpos_t – 但fpos_t不是算术类型 – 例如,它保存与locale处理charset相关的内容。

它没有理由不起作用。

还有别的办法吗? 如果你知道文件名,你可以使用stat:

 struct stat st; stat(filename, &st); size = st.st_size; 

顺便说一句, ftell返回一个long int

sys / stat.h头定义函数fstat()lstat()stat()返回的数据结构。

尝试使用_filelength 。 虽然它不便携,但我认为没有任何完全可移植的方法可以做到这一点。

使用fstat()尝试这个:

 int file=0; if((file=open(,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唯一的负返回值为-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);