gpt4 book ai didi

c - 递归删除C中的目录

转载 作者:太空宇宙 更新时间:2023-11-04 10:41:50 24 4
gpt4 key购买 nike

我必须递归删除一个目录,在我的操作系统类的 C 中这个目录不一定是空的。我试过这样做,但它似乎不起作用。不过,我编译代码时没有错误。任何建议都会对我有很大帮助。

 #include <stdio.h> 
#include <sys/stat.h>
#include <dirent.h>


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


if (argc<2) {
printf("Wrong numer of arguments\n");
return 1;
}


int is_dir (char * filename)
{
struct stat buf;
int ret = stat (filename, & buf);
if (0 == ret)
{
if (buf.st_mode & S_IFDIR)
{
return 0;
}
else
{
return 1;
}
}
return -1;
}

int delete_dir (char * dirname)
{
char chBuf [256];
DIR * dir = NULL;
struct dirent * ptr;
int ret = 0;
dir = opendir (dirname);
if (NULL == dir)
{
return -1;
}
while ((ptr = readdir (dir))!= NULL)
{
ret = strcmp (ptr-> d_name, ".");
if (0 == ret)
{
continue;
}
ret = strcmp (ptr-> d_name, "..");
if (0 == ret)
{
continue;
}
snprintf (chBuf, 256, "%s /%s", dirname, ptr-> d_name);
ret = is_dir (chBuf);
if (0 == ret)
{
ret = delete_dir(chBuf);
if (0!=ret)
{
return -1;
}
}
else if (1 == ret)
{
ret = remove (chBuf);
if (0!=ret)
{
return -1;
}
}
}
closedir (dir);

ret = remove (dirname);
if (0!= ret)
{
return -1;
}
return 0;
}
}

谢谢!

最佳答案

您缺少对您实现的函数的调用:您的 main() 函数除了检查参数计数外什么都不做。

您需要在主函数中使用 delete_dir(argv[1]); 之类的东西。

还有一个空格的错误:

必须是

snprintf (chBuf, 256, "%s/%s", dirname, ptr-> d_name);

代替

snprintf (chBuf, 256, "%s /%s", dirname, ptr-> d_name);

嵌套函数在 C 语言中通常不是一个好的风格尽管它适用于某些编译器。

通常,调试代码的一种简单方法是添加 printf 语句。

关于c - 递归删除C中的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34763491/

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