linux下實現目錄即文件的完整刪除
阿新 • • 發佈:2018-06-02
truct remove define limits In continue tin mit ret
功能:
1、刪除目錄
2、刪除文件
3、刪除不為空的目錄即下屬文件
#ifndef _DELETE_FILE #define _DELETE_FILE #include <sys/stat.h> #include <unistd.h> #include <stdlib.h> #include <dirent.h> #include <limits.h> #include <string.h> #include <stdio.h> #include <limits.h> //判斷是否為目錄 bool is_dir(const char *path) { struct stat statbuf; if(lstat(path, &statbuf) ==0)//lstat返回文件的信息,文件信息存放在stat結構中 { return S_ISDIR(statbuf.st_mode) != 0;//S_ISDIR宏,判斷文件類型是否為目錄 } return false; } //判斷是否為常規文件 bool is_file(const char *path) { struct stat statbuf; if(lstat(path, &statbuf) ==0) return S_ISREG(statbuf.st_mode) != 0;//判斷文件是否為常規文件 return false; } //判斷是否是特殊目錄 bool is_special_dir(const char *path) { return strcmp(path, ".") == 0 || strcmp(path, "..") == 0; } //生成完整的文件路徑 void get_file_path(const char *path, const char *file_name, char *file_path) { strcpy(file_path, path); if(file_path[strlen(path) - 1] != ‘/‘) sprintf(file_path,"%s%s",file_path, "/"); sprintf(file_path,"%s%s",file_path file_name); } void delete_file(const char *path) { DIR *dir; dirent *dir_info; char file_path[PATH_MAX]; if(is_file(path)) { remove(path); return; } if(is_dir(path)) { if((dir = opendir(path)) == NULL) return; while((dir_info = readdir(dir)) != NULL) { get_file_path(path, dir_info->d_name, file_path); if(is_special_dir(dir_info->d_name)) continue; delete_file(file_path); rmdir(file_path); } } } int main(int argc, char **argv) { delete_file("/home/AlexCthon/test"); return 0; } #endif
linux下實現目錄即文件的完整刪除