自动获取指定路径文件夹,删除文件夹及子文件

1.思路

  1. 读取指定路径文件夹,获取文件个数、名字、大小等信息。核心函数:_findfirst、_findnext和_fineclose
struct _finddata_t {
 unsigned attrib;
 time_t  time_create; 
 time_t  time_access; 
 time_t  time_write;
 _fsize_t size;
 char  name[260];
};

time_t:其实就是long
_fsize_t:就是unsigned long
attrib就是所查找文件的属性:_A_ARCH(存档)、_A_HIDDEN(隐藏)、_A_NORMAL(正常)、_A_RDONLY(只读)、 _A_SUBDIR(文件夹)、_A_SYSTEM(系统)。
time_create、time_access和time_write分别是创建文件的时间、最后一次访问文件的时间和文件最后被修改的时间。
size:文件大小
name:文件名

_findfirst函数:long _findfirst(const char * , struct _finddata_t );
第一个参数为文件名,可以用".“来查找所有文件,也可以用”*.cpp"来查找.cpp文件。第二个参数是_finddata_t结构体指针。若查找成功,返回文件句柄,若失败,返回-1。
_findnext函数:int _findnext(long, struct _finddata_t *);
第一个参数为文件句柄,第二个参数同样为_finddata_t结构体指针。若查找成功,返回0,失败返回-1。此函数可与_findfirst函数配合,找到指定路径下的所有文件
_findclose()函数:int _findclose(long);
只有一个参数,文件句柄。若关闭成功返回0,失败返回-1。
三个函数一起实现文件夹的读取,可以获取文件夹的名字、大小、时间等信息

  1. 删除文件夹,核心函数:SHFileOperation
int SHFileOperation( LPSHFILEOPSTRUCT lpFileOp);
 typedef struct _SHFILEOPSTRUCT {
   HWND hwnd;//指向发送消息的窗口
   UINT wFunc;//执行的操作
   LPCTSTR pFrom;//源文件名
   LPCTSTR pTo;//目标文件名
   FILEOP_FLAGS fFlags;//操作与确认标识
   BOOL fAnyOperationsAborted;//操作是否终止
   LPVOID hNameMappings;//文件映射
   LPCTSTR lpszProgressTitle;//进度条标题
 } SHFILEOPSTRUCT, *LPSHFILEOPSTRUCT;

2.代码实现,文件夹读取删除

hFile为long型,但运行报错,这里使用intptr_t,可以正常运行

getJustCurrentFile(CString CSpath, vector<string>& files)
{
	/*CSpath = CSpath.Left(CSpath.GetLength() - 13);
	string path = CStringA(CSpath);*/
	string path = "E:\\缺陷检测图片\\";
	//文件句柄
	intptr_t hFile = 0;
	struct _finddata_t fileinfo;
	string p;
	if ((hFile = _findfirst(p.assign(path).append("*").c_str(), &fileinfo)) != -1)
	{
		do
		{
			if ((fileinfo.attrib & _A_SUBDIR))//attrib属性为_A_SUBDIR读取文件夹
			{
				if ((strcmp(fileinfo.name, ".") != 0) && (strcmp(fileinfo.name, "..") != 0))//读取文件路径时附带\\.和\\..两个文件,这里做下排除
				{
					files.push_back(path + fileinfo.name);
				}
			}
		} while (_findnext(hFile, &fileinfo) == 0);
		_findclose(hFile);
	}
}

删除文件夹及子文件,删除文件的一些参数这里不作描述,可根据需求自行实现,这里只介绍框架

BOOL DelTree(LPCTSTR lpszPath)
{
	SHFILEOPSTRUCT FileOp;
	FileOp.fFlags = FOF_NOCONFIRMATION;
	FileOp.hNameMappings = NULL;
	FileOp.hwnd = NULL;
	FileOp.lpszProgressTitle = NULL;
	FileOp.pFrom = lpszPath;
	FileOp.pTo = NULL;
	FileOp.wFunc = FO_DELETE;
	return SHFileOperation(&FileOp) == 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值