Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
S#u ISDIR()的问题导致C出现(可能是因为stat()未正确设置其结构?)_C_Stat - Fatal编程技术网

S#u ISDIR()的问题导致C出现(可能是因为stat()未正确设置其结构?)

S#u ISDIR()的问题导致C出现(可能是因为stat()未正确设置其结构?),c,stat,C,Stat,我希望我的程序获取一个目录,然后打印该目录的内容,并说明每个项目是否为目录。如果我给它一个包含文件F1.txt和F2.txt以及文件夹D1、D2和D3的目录,它应该打印: F1.txt不是目录 F2.txt不是目录 D1是目录 D2是目录 D3是目录 char* curr[100]; DIR* dirp = opendir(name); struct dirent* x; struct stat fstat; //go to each file til readdir gives NULL w

我希望我的程序获取一个目录,然后打印该目录的内容,并说明每个项目是否为目录。如果我给它一个包含文件F1.txt和F2.txt以及文件夹D1、D2和D3的目录,它应该打印:

F1.txt不是目录
F2.txt不是目录
D1是目录
D2是目录
D3是目录

char* curr[100];
DIR* dirp = opendir(name);
struct dirent* x;
struct stat fstat;

//go to each file til readdir gives NULL
while((x = readdir(dirp)) != NULL) {

  //store name of file
  curr[0] = (x -> d_name);

  //ignore files starting with "."
  if(*curr[0] == '.')
    continue;

  //set status
  stat(curr[0], &fstat);

  //print file name
  printf("%s", *curr);

  //check if it's a directory and print result
  if(S_ISDIR(fstat.st_mode))
    printf(" is directory\n");
  else
    printf(" is not directory\n");
}

这表明所有文件都不是目录。如果我删除忽略以“.”开头的文件的部分,它会说F1.txt、F2.txt和D1不是目录,而、、D2、D3和。。是目录(按该顺序)。这让我觉得问题在于stat调用而不是宏的使用,但我在这里很困惑,所以我不知道。

您传递的是
stat
文件名,但它需要文件路径。如果您检查
stat
的返回值,您将看到只有
成功,因为它们存在于任何目录中


标准答案:永远不要试图理解程序在错误条件下的行为。只要有一点神秘(最晚),就添加代码来检查所有函数的返回值。

谢谢!我想应该是这样简单的>>