У меня есть программа на 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;
}
Кажется, это работает, но я слишком напуган, чтобы использовать его на производстве. Я уверен, что сделал что-то не так. Кто-нибудь знает библиотеку C для рекурсивного удаления, которую я пропустил, или кто-то может указать на мои ошибки?
Спасибо.