=Start=
缘由:
学习需要
正文:
参考解答:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <sys/types.h> #include <dirent.h> // int rc = unlink(LOCKFILE); // if (rc == -1) { // fprintf(stderr, "Failed to delete current pid file.\n"); // return -1; // } int remove_directory( const char *path) { DIR *d = opendir(path); size_t path_len = strlen(path); int r = - 1 ; if (d) { struct dirent *p; r = 0 ; while (!r && (p = readdir(d))) { int r2 = - 1 ; char *buf; size_t len; /* Skip the names "." and ".." as we don't want to recurse on them. */ if (!strcmp(p->d_name, "." ) || !strcmp(p->d_name, ".." )) { continue ; } len = path_len + strlen(p->d_name) + 2 ; buf = malloc(len); if (buf) { struct stat statbuf; snprintf(buf, len, "%s/%s" , path, p->d_name); if (!stat(buf, &statbuf)) { if (S_ISDIR(statbuf.st_mode)) { r2 = remove_directory(buf); } else { r2 = unlink(buf); } } free(buf); } r = r2; } closedir(d); } if (!r) { r = rmdir(path); } return r; } int main( int argc, char const *argv[]) { if (argc < 2 ) { return 1 ; } int rc = remove_directory(argv[ 1 ]); if (rc == - 1 ) { fprintf(stderr, "Failed to delete file/directory: '%s'.\n" , argv[ 1 ]); return 1 ; } return 0 ; } |
参考链接:
Linux下用C语言删除文件/目录
https://linux.die.net/man/3/remove
http://man7.org/linux/man-pages/man2/unlink.2.html # delete a name and possibly the file it refers to
http://man7.org/linux/man-pages/man2/rmdir.2.html # deletes a directory, which must be empty
http://c.biancheng.net/cpp/html/322.html
在C语言中如何删除一个非空目录?
https://stackoverflow.com/questions/2256945/removing-a-non-empty-directory-programmatically-in-c-or-c
https://stackoverflow.com/questions/5467725/how-to-delete-a-directory-and-its-contents-in-posix-c
=END=