C 结构stat和stat函数失败

C 结构stat和stat函数失败,c,struct,stat,scandir,C,Struct,Stat,Scandir,我想做一个ls函数。下面是我对每个文件的描述代码 struct stat fileStat; struct dirent **files; num_entries = scandir(filename, &files, file_select, alphasort); stat(files[i-1]->d_name,fileStat); 由于某些原因,一旦进入stat,它将返回-1。我认为这是因为fileStat不够大,无法存储这些值,但我不知道如何解决这个问题。提前谢谢你的帮

我想做一个ls函数。下面是我对每个文件的描述代码

struct stat fileStat;
struct dirent **files;

num_entries = scandir(filename, &files, file_select, alphasort);
stat(files[i-1]->d_name,fileStat);

由于某些原因,一旦进入stat,它将返回-1。我认为这是因为fileStat不够大,无法存储这些值,但我不知道如何解决这个问题。提前谢谢你的帮助

考虑一下你自己。简而言之,stat()返回:

成功时,返回零。出现错误时,返回-1,返回errno 适当地设置

而errno的列表是:

  • 伊斯
  • EBADF
  • 埃法特
  • 私奔
  • 搪瓷
  • 埃诺特
  • 烯醇
  • 依诺蒂尔
  • 溢流
调用stat后,用检查它的返回值,如果它等于-1,则检查errno(使用开关)

例如:

if(stat(files[i-1]->d_name,fileStat)) {
   switch(errno) {
   case EACCES:
       // Add code or at least 
       perror("STAT ERROR:");
       break;

   case EBADF:
       // ...
       break;

   case EFAULT:
       // ...
       break;

       // ...
       // Do this to all possible errno's for the stat
       // ...
   case EOVERFLOW:
       // ...
       break;
   }
}
如果在存储路径时遇到问题,请尝试将数组声明为(如果使用linux):

#包括
//...
字符当前路径[路径最大值];
如果您正在使用Windows:

#include <windows.h>
//...
char current_path[MAX_PATH];
#包括
//...
字符当前路径[最大路径];

另外,感谢您指出我的开关输入错误:)

使用
errno
确定函数失败的原因。好的,它说没有这样的文件或目录。。。我能够修复它,只要有一个if循环,当它返回错误时什么也不做。但是是的。。。如何正确处理此问题?
I
的值是多少?看见提供必要的详细信息,包括您的代码和相关错误(如果有),这里的每个人都可以帮助您解答问题。我使用I在for循环中运行文件,直到找到num_条目。scandir文件名不是路径。可能您需要在此处预先添加“
文件名”
。在一个
开关中不能有两次
大小写默认值:
#include <windows.h>
//...
char current_path[MAX_PATH];