C++删除本地文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <direct.h>
#include <errno.h>

//判断是否是"…“目录和”."目录
static bool IsSpecialDir(const char* path)
{
return strcmp(path, “…”) == 0 || strcmp(path, “.”) == 0;
}

//显示删除失败原因
static void ShowError(const char* file_name = NULL)
{
errno_t err;
_get_errno(&err);
switch (err)
{
case ENOTEMPTY:
printf(“给定的路径不是目录,该目录不是空的,或者该目录是当前工作目录或根目录.\n”);
break;
case ENOENT:
printf(“该路径无效.\n”);
break;
case EACCES:
printf("%s 已被某个应用程序打开,无法删除.\n", file_name);
break;
}
}
static void GetFilePath(const char* path, const char* file_name, char* file_path)
{
strcpy_s(file_path, sizeof(char) * _MAX_PATH, path);
file_path[strlen(file_path) - 1] = ‘\0’;
strcat_s(file_path, sizeof(char) * _MAX_PATH, file_name);
}

//递归搜索目录中文件并删除
static void DeleteFile(char* path)
{
char pcSearchPath[_MAX_PATH];
sprintf_s(pcSearchPath, _MAX_PATH, "%s\", path); //pcSearchPath 为搜索路径, 代表通配符

_finddata_t DirInfo; //文件夹信息
_finddata_t FileInfo; //文件信息
intptr_t f_handle; //查找句柄

char pcTempPath[_MAX_PATH];
if ((f_handle = _findfirst(pcSearchPath, &DirInfo)) != -1)
{
    while (_findnext(f_handle, &FileInfo) == 0)
    {
        if (IsSpecialDir(FileInfo.name))
            continue;
        if (FileInfo.attrib & _A_SUBDIR)//如果是目录,生成完整的路径
        {
            GetFilePath(pcSearchPath, FileInfo.name, pcTempPath);
            DeleteFile(pcTempPath); //开始递归删除目录中的内容
            if (FileInfo.attrib == 20)
                printf("This is system file, can't delete!\n");
            else
            {
                //删除空目录,必须在递归返回前调用_findclose,否则无法删除目录
                if (_rmdir(pcTempPath) == -1)
                {
                    ShowError();//目录非空则会显示出错原因
                }
            }
        }
        else
        {
            strcpy_s(pcTempPath, pcSearchPath);
            pcTempPath[strlen(pcTempPath) - 1] = '\0';
            strcat_s(pcTempPath, FileInfo.name);//生成完整的文件路径

            if (remove(pcTempPath) == -1)
            {
                ShowError(FileInfo.name);
            }

        }
    }
    _findclose(f_handle);//关闭打开的文件句柄,并释放关联资源,否则无法删除空目录
}
else
{
    ShowError();//若路径不存在,显示错误信息
}

}

void DeleteAllFile(char* pcPath)
{
DeleteFile(pcPath); //删除该文件夹里的所有文件
}

int main(int argc, char **argv)
{
DeleteAllFile(“D:\test”); //会删除 test 文件夹里的所有文件
system(“pause”);
return 0;
}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值