我正在尝试打印当前目录中文件的大小,我正在使用此函数来获取大小
string filesize( const char * filename){
ostringstream os;
struct stat buf;
stat(filename, &buf);
if( buf.st_size > 1000000000){
os << setprecision(2) << fixed << (float)buf.st_size/1024000 <<"mb";
}else if( buf.st_size > 1024){
os << setprecision(2) << fixed << (float)buf.st_size / 1024 <<"kb";
}else{
os << buf.st_size <<"bt";
}
return os.str();
}
和这段代码获取文件列表并打印其大小
DIR *dir;
dirent *pdir;
dir=opendir(".");
int det;
while((pdir=readdir(dir))){
cout << filesize(pdir -> d_name) << endl;
}
效果很好。唯一的问题是当目录包含指向不在当前目录中的文件的符号链接时,例如
<{1>}/sandbox/tests
中有一个sym链接指向中的文件
/school/work
在这种情况下,这段代码会引发大量关于
的错误条件跳转或移动取决于未初始化的值
使用大小为8的未初始化值
为什么会出现这个问题?有什么方法可以解决这个问题吗?我想弄清楚但找不到任何解决方案