我想要的只是以字节为单位打印文件的大小 我正在使用
DIR *d;
struct dirent *dir;
d= opendir(absolute_path);
while((dir= readdir(d))!=NULL){
printf("%s\t %d\t %u\n",dir->d_name,dir->d_type,(int long long )dir->d_off);
}
打印类型为off_t
的d_off是错误的。
对于323,388 bytes
的文件,它会打印1296623584
我认为铸造是个问题。我尝试过很多演员,例如%d
,%s
,%u
,%llu
......
什么是正确的铸造?
编辑:用于查找文件大小的正确函数是使用stat结构lstat()
。
答案 0 :(得分:2)
来自readdir
手册页:
在POSIX.1-2001中仅指定字段d_name和d_ino。其余字段可用于许多系统,但不是所有系统。在glibc下,程序可以通过测试是否定义了宏_DIRENT_HAVE_D_NAMLEN,_DIRENT_HAVE_D_RECLEN,_DIRENT_HAVE_D_OFF或_DIRENT_HAVE_D_TYPE来检查POSIX.1中未定义的字段的可用性。
d_off中返回的值与通过在目录流中的当前位置调用telldir(3)返回的值相同。请注意,尽管它的类型和名称,d_off字段很少在现代文件系统上的任何类型的目录偏移量。应用程序应将此字段视为不透明值,不对其内容进行任何假设;另见telldir(3)。
要查找文件的大小,请参阅How do you determine the size of a file in C?
答案 1 :(得分:1)
正如@Andrey指出的那样,d_off的值并不总是有用甚至存在。例如,OSX没有它。请改为使用stat
来电话。