2011-04-01 144 views
2

我试图通过使用dirent.h头文件来获取目录中文件的大小。但是,获取目录中文件的大小

stat(ent->d_name, &statbuf) 

返回始终为-1,我无法正确获取大小。可能是什么原因?

回答

8

d_name包含该目录内文件的名称。 stat想要包含目录部分的名称,除非它是当前目录。

创建一个临时字符串,其中包含d_name文件的完整路径。

编辑:样品

char const * DirName = "/tmp"; 
.... 
char * FullName = (char*) malloc(strlen(DirName) + strlen(ent->d_name) + 2); 
strcpy(FullName, DirName); 
strcat(FullName, "/"); 
strcat(FullName, ent->d_name); 
stat(FullName, &statbuf); 
free(FullName); 
+0

我给统计目录名称后,它总是返回每个文件4096。 – thetux4 2011-04-01 14:49:40

+2

thetux4:您需要将*目录*和*文件*组成的字符串赋予stat。如果您只给出一个目录名称,您将获得目录的大小,通常从4096 – Erik 2011-04-01 14:50:58

+0

开始,谢谢Erik,解决了我的问题。 – thetux4 2011-04-01 14:54:45

1

我使用C++,我认为上面的代码将工作,但它并没有因为它仍然需要从虚空转换为char *:

char *fullName = (char*) malloc(strlen(path) + strlen(entry->d_name) + 2); 

希望这可以帮助别人:)