"); //-->
我一直以为使用c提供的方法可以跨越平台,但无疑我是错的,上次写的删除文件所使用的两个api——_findfirst和_findnext无法在gcc下使用,但linux下有opendir和readdir来代替。复制内容到剪贴板 代码: / //Name: DeleteFile //Purpose: Delete file in the special directory //Author: Alex Wang //Created: 2011-12-01 //Copy right: //Licence: // #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] != '/') strcat(file_path, "/"); strcat(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/AlexWang/test"); return 0; } #endif
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。