日期:2014-05-16 浏览次数:20688 次
代码如下:
void list_dir(char *path)
{
DIR *dir;
struct dirent *entry;
struct stat stat_buf;
if ((dir = opendir(path)) == NULL)
{
printf("cannot open dir:%s\n", path);
return;
}
while ((entry = readdir(dir)) != NULL)
{
lstat(entry->d_name, &stat_buf);
if (!S_ISDIR(stat_buf.st_mode))
printf("%s, %d", entry->d_name, (int)stat_buf.st_size);
}
closedir(dir);
}
结果打印出来的是这种结果:
httpd-2.4.2.tar.gz, 4096
Firefox-latest.exe, 4096
Makefile.pdf, 4096
cr-SecureCRT.rar, 4096
putty.exe, 4096
结果显示大小都是4096,有时候只是其中一个文件的大小比如,都是xxx文件的大小,那个4096应该是目录"."和".."的大小,这就很奇怪了,为什么打印出来的不是自身文件的大小。
后来没办法用以下方法获取文件大小:
FILE *fp = fopen(name, "r");
if (fp)
{
fseek(fp, 0L, SEEK_END);
int len = ftell(fp);
fseek(fp, 0L, SEEK_SET);
return len;
}
但是使用标准的c函数来获取文件大小有个问题,就是一般能够获取出小文件的大小,但是有的大文件就无法获取出大小,因为标准C的文件操作函数不支持对超过2G