如何删除 C 或 C++ 中的非空目录?有什么功能吗? rmdir 只删除空目录。请提供一种不使用任何外部库的方法。
还告诉我如何删除 C 或 C++ 中的文件?
原文由 avd 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何删除 C 或 C++ 中的非空目录?有什么功能吗? rmdir 只删除空目录。请提供一种不使用任何外部库的方法。
还告诉我如何删除 C 或 C++ 中的文件?
原文由 avd 发布,翻译遵循 CC BY-SA 4.0 许可协议
此代码将打开特定目录并遍历所有文件并删除该目录下的文件。之后它将在最后删除空目录。
/**
* @file RemoveDir.c
* @author Om Patel (ompatel1861@gmail.com)
* @brief This program will remove non empty directory.
* @version 0.1
* @date 2022-05-31
*
* @copyright Copyright (c) 2022
*
*/
#include<stdio.h>
#include<string.h>
#include<dirent.h>
#include <unistd.h>
int main()
{
DIR* dir = opendir("OUTPUT/Aakash");
struct dirent* entity;
entity = readdir(dir);
while(entity != NULL){
char path[30] ="OUTPUT/Aakash/";
printf("%s\n",entity->d_name);
strcat(path,entity->d_name);
printf("PAth: %s\n",path);
remove(path);
entity = readdir(dir);
}
char path1[30] ="OUTPUT/Aakash";
rmdir(path1);
closedir(dir);
char out[20]="OUTPUT/";
char fol_file[30];
sprintf(fol_file,"%s\\",out);
printf("%s",fol_file);
return 0;
}
原文由 OM PATEL 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
您想编写一个函数(递归函数最简单,但在深层目录上很容易耗尽堆栈空间),它将枚举目录的子级。如果你发现一个子目录是一个目录,你就递归它。否则,你删除里面的文件。完成后,目录为空,您可以通过系统调用将其删除。
要枚举 Unix 上的目录,您可以使用
opendir()
、readdir()
和closedir()
。要删除您,请在空目录上使用rmdir()
(即在您的函数结束时,在删除子目录后)和unlink()
在文件上。请注意,在许多系统上,不支持d_type
中的成员struct dirent
;在这些平台上,您必须使用stat()
和S_ISDIR(stat.st_mode)
来确定给定路径是否为目录。On Windows, you will use
FindFirstFile()
/FindNextFile()
to enumerate,RemoveDirectory()
on empty directories, andDeleteFile()
to remove files.这是一个可能适用于 Unix 的示例(完全未经测试):