gpt4 book ai didi

c - C 编程中的错误 : stat: No Such File Or Directory, opendir() 和 stat()

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:43 25 4
gpt4 key购买 nike

嘿,感谢阅读。

我正在制作一个程序,它接受 1 个参数(目录)并使用 opendir()/readdir() 读取目录中的所有文件,并使用 stat 显示文件类型(reg、链接、目录等)。当我在 shell 中执行我的程序时(我使用的是 redhat linux),我收到错误“No Such file or Directory”。这是我的代码:

#define _BSD_SOURCE
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {

DIR *dirp;
struct dirent* dent;
struct stat info;

//If no args
if(argc == 1){

argv[1] = ".";

dirp=opendir(argv[1]); // specify directory here: "." is the "current directory"
do {
dent = readdir(dirp);
if (dent)
{
//////////////////////////////////////////////////////////////////////////
if (stat(dent->d_name, &info) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}

switch (info.st_mode & S_IFMT) {
case S_IFBLK: printf("block device\n"); break;
case S_IFCHR: printf("character device\n"); break;
case S_IFDIR: printf("dir "); break;
case S_IFIFO: printf("FIFO/pipe\n"); break;
case S_IFLNK: printf("lnk "); break;
case S_IFREG: printf("reg "); break;
case S_IFSOCK: printf("socket\n"); break;
default: printf("unknown?\n"); break;
}

//////////////////////////////////////////////////////////////////////////

printf("%s \n", dent->d_name);

}
} while (dent);
closedir(dirp);

}

////////////////////////////////////////////////////////////////////////////////////////////////
//If specified directory
if(argc > 1){

dirp=opendir(argv[1]); // specify directory here: "." is the "current directory"
do {
dent = readdir(dirp);
if (dent)
{

/////////////////////////////////////////////////////////////////////////////////////
if (stat(dent->d_name, &info) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}



switch (info.st_mode & S_IFMT) {
case S_IFBLK: printf("block device\n"); break;
case S_IFCHR: printf("character device\n"); break;
case S_IFDIR: printf("dir "); break;
case S_IFIFO: printf("FIFO/pipe\n"); break;
case S_IFLNK: printf("lnk "); break;
case S_IFREG: printf("reg "); break;
case S_IFSOCK: printf("socket\n"); break;
default: printf("unknown?\n"); break;
}
//////////////////////////////////////////////////////////////////////////////////////
// printf("%s\n", argv[1]);

printf("%s \n", dent->d_name);
}
} while (dent);
closedir(dirp);

}
return 0;
}

有什么想法吗?我有点卡住了。感谢您的输入

此外,“链接”类型的文件是要使用 stat 输出,还是必须使用 lstat?不确定在这种情况下如何使用 lstat,如果我将结构类型更改为“struct lstat info”,它会引发错误。

最佳答案

dent->d_name 是相对于当前目录的文件名(例如“/home/barney/myfile.txt”),而不是文件的绝对完整路径(例如/home/barney/sources/myfile.txt),这是 stat 所期望的。

这就是stat找不到路径的原因。在每次调用 stat 之前打印 dent->d_name 以观察那些不正确的路径。

编辑:您可以尝试 chdir() 将您的工作目录更改为 argv[1]

关于c - C 编程中的错误 : stat: No Such File Or Directory, opendir() 和 stat(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23970766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com