linux系统调用之文件:递归删除非空目录
2013-08-15 09:59
513 查看
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#define BUF_LEN 1024
//int stat(const char *path, struct stat *buf);
//int fstat(int filedes, struct stat *buf);
//int lstat(const char *path, struct stat *buf);
//int remove(const char *pathname);
//struct dirent *readdir(DIR *dir);
//DIR *opendir(const char *name);
void rm(char * name)
{
DIR *dir;
struct dirent *read_dir;
struct stat st;
char buf[BUF_LEN];
if(lstat(name, &st) < 0)
{
fprintf(stderr, "Lstat Error!/n");
exit(1);
}
if(S_ISDIR(st.st_mode))
{
if((dir = opendir(name)) == NULL)
{
fprintf(stderr, "remove [%s] faild/n", name);
exit(1);
}
while((read_dir = readdir(dir)) != NULL)
{
if(strcmp(read_dir->d_name, ".") == 0 ||
strcmp(read_dir->d_name, "..") == 0)
continue;
sprintf(buf, "%s/%s", name, read_dir->d_name);
rm(buf);
}
}
printf("rm :%s/n", name);
if(remove(name) < 0)
{
fprintf(stderr, "remove [%s] faild/n", name);
}
}
int main(int argc, char **argv)
{
if(argc < 1)
{
fprintf(stderr, "Usage <%s><file>/n", argv[0]);
}
rm(argv[1]);
return 0;
}
分享到:
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#define BUF_LEN 1024
//int stat(const char *path, struct stat *buf);
//int fstat(int filedes, struct stat *buf);
//int lstat(const char *path, struct stat *buf);
//int remove(const char *pathname);
//struct dirent *readdir(DIR *dir);
//DIR *opendir(const char *name);
void rm(char * name)
{
DIR *dir;
struct dirent *read_dir;
struct stat st;
char buf[BUF_LEN];
if(lstat(name, &st) < 0)
{
fprintf(stderr, "Lstat Error!/n");
exit(1);
}
if(S_ISDIR(st.st_mode))
{
if((dir = opendir(name)) == NULL)
{
fprintf(stderr, "remove [%s] faild/n", name);
exit(1);
}
while((read_dir = readdir(dir)) != NULL)
{
if(strcmp(read_dir->d_name, ".") == 0 ||
strcmp(read_dir->d_name, "..") == 0)
continue;
sprintf(buf, "%s/%s", name, read_dir->d_name);
rm(buf);
}
}
printf("rm :%s/n", name);
if(remove(name) < 0)
{
fprintf(stderr, "remove [%s] faild/n", name);
}
}
int main(int argc, char **argv)
{
if(argc < 1)
{
fprintf(stderr, "Usage <%s><file>/n", argv[0]);
}
rm(argv[1]);
return 0;
}
分享到:
相关文章推荐
- linux系统调用之文件:递归删除非空目录
- 递归删除一个非空目录及其下所有文件和目录
- C++递归删除非空目录所有文件
- 递归删除指定目录下所有文件及子目录
- 如何删除文件夹下所有的文件(包括非空目录和文件)????
- 递归删除目录下所有文件
- 运用递归的方式删除整个目录及其中的文件
- 递归删除文件目录
- linux下递归删除目录下所有指定类型文件
- C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件....
- C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件....
- day20File类,各方法。递归。删除一带内容的目录。Properties 。记录应用程序运行次数。打印流。切割合并文件。
- 遍历出指定目录下的所有文件 --递归调用
- 黑马程序员——list()返回该目录下文件,文件夹,listFiles()返回文件文,件夹对象,递归调用获取所有文件,文件夹,以及文件名过滤
- 用递归方法删除文件夹目录及文件
- 文件操作总结-递归删除文件(文件下含有多级目录和文件)
- 递归删除文件或目录
- shell删除当前目录及递归目录下文件指定字符串
- PHP 使用递归方法删除目录及目录下文件
- 用递归方法删除文件夹目录及文件