linux 中删除文件的函数,linux下实现rm()函数删除文件或目录

在linux下有两个函数可以用来删除文件:

#include

int unlink(const char *pathname);

unlink函数删除文件系统中的一个名字,如果这个名字是该文件的最后一个link并且该文件没有被任何进程打开,那么删除该文件。否则等到文件被关闭或最后一个link被删除后删除该文件并释放空间。

#include

int rmdir(const char *pathname);

只有当目录为空的时候,rmdir才能删除该目录。

由于rmdir只能删除空目录文件,所以在删除目录文件之前需要首先删除目录中的所有文件。

首先实现rm_dir(const string& path)函数删除目录中的所有文件,在rm_dir()中遍历每一个文件,如果遇到目录文件,则递归删除该目录文件。

//recursively delete all the file in the directory.

int rm_dir(std::string dir_full_path)

{

DIR* dirp = opendir(dir_full_path.c_str());

if(!dirp)

{

return -1;

}

struct dirent *dir;

struct stat st;

while((dir = readdir(dirp)) != NULL)

{

if(strcmp(dir->d_name,".") == 0

|| strcmp(dir->d_name,"..") == 0)

{

continue;

}

std::string sub_path = dir_full_path + ‘/‘ + dir->d_name;

if(lstat(sub_path.c_str(),&st) == -1)

{

Log("rm_dir:lstat ",sub_path," error");

continue;

}

if(S_ISDIR(st.st_mode))

{

if(rm_dir(sub_path) == -1) // 如果是目录文件,递归删除

{

closedir(dirp);

return -1;

}

rmdir(sub_path.c_str());

}

else if(S_ISREG(st.st_mode))

{

unlink(sub_path.c_str()); // 如果是普通文件,则unlink

}

else

{

Log("rm_dir:st_mode ",sub_path," error");

continue;

}

}

if(rmdir(dir_full_path.c_str()) == -1)//delete dir itself.

{

closedir(dirp);

return -1;

}

closedir(dirp);

return 0;

}

实现rm()函数,判断文件类型,如果是目录文件则rm_dir,普通文件则unlink.

int rm(std::string file_name)

{

std::string file_path = file_name;

struct stat st;

if(lstat(file_path.c_str(),&st) == -1)

{

return -1;

}

if(S_ISREG(st.st_mode))

{

if(unlink(file_path.c_str()) == -1)

{

return -1;

}

}

else if(S_ISDIR(st.st_mode))

{

if(file_name == "." || file_name == "..")

{

return -1;

}

if(rm_dir(file_path) == -1)//delete all the files in dir.

{

return -1;

}

}

return 0;

}

时间: 06-23

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值