我有一个C程序,在程序的某一点上有这个:
system("rm -rf foo");
其中foo是一个目录.我决定,而不是调用系统,最好在代码中执行递归删除.我假设一段代码很容易找到.傻我.无论如何,我最后写了这个:
#include <stdio.h>
#include <sys/stat.h>
#include <dirent.h>
#include <libgen.h>
int recursiveDelete(char* dirname) {
DIR *dp;
struct dirent *ep;
char abs_filename[FILENAME_MAX];
dp = opendir (dirname);
if (dp != NULL)
{
while (ep = readdir (dp)) {
struct stat stFileInfo;
snprintf(abs_filename, FILENAME_MAX, "%s/%s", dirname, ep->d_name);
if (lstat(abs_filename, &stFileInfo) < 0)
perror ( abs_filename );
if(S_ISDIR(stFileInfo.st_mode)) {
if(strcmp(ep->d_name, ".") &&
strcmp(ep->d_name, "..")) {
printf("%s directory\n",abs_filename);
recursiveDelete(abs_filename);
}
} else {
printf("%s file\n",abs_filename);
remove(abs_filename);
}
}
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
remove(dirname);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但我太害怕在生产中实际使用它.我确定我做错了什么.有没有人知道一个C库做递归删除我错过了,或者有人能指出我犯的任何错误?
谢谢.
nin*_*alj 13
POSIX有一个名为ftw(3)(文件树行走)的函数
遍历目录dirpath下的目录树,并为树中的每个条目调用一次fn().
幸好被吓死了,在这种情况下这是一种健康的态度。
我没有建议的库,在这种情况下你有两个选择:
1) 彻底“运行”此代码
a) 不在机器上;在纸上,用铅笔。获取现有的目录树,列出所有元素并通过每个步骤运行程序,验证其是否有效
b) 编译代码,但将所有删除调用替换为执行 printf 的行 - 验证它是否执行了应该执行的操作
c) 重新插入删除调用并运行
2)使用你原来的方法(调用system())
| 归档时间: |
|
| 查看次数: |
19822 次 |
| 最近记录: |