按照目录结构整理文件到单个目录小工具

该文章介绍了一款小工具,用于简化复杂的文件目录结构,将文件集中到一个目录下,同时保留原来的目录信息在文件名中。工具还具备目录结构恢复功能,以防误操作。核心代码已提供,可作为参考进行功能实现。如需软件成品或全套源代码,作者提供私信联系方式。

有时候有一些文件存放的目录结构非常复杂,但是实际上这样反而导致查看不方便,因为每次都要点进去子目录查看,然后又要返回,很不方便,我们希望这些文件可以整理到一个目录,但是又希望能够记得这些文件原来是在哪个目录的,于是我写了这款小工具,可以实现文件整理,并且支持目录结构恢复,这样就算万一操作错误了也没问题。

比如文件结构如下的文件:

 整理之后,就变成了如下的结果,会自动删除整理之后为空的目录(非空不删除):

其中文件名保持了目录结构,并且也保留了自身的名称。

软件界面如下:

 

核心代码如下:

//author:autumoon
//联系邮箱:9506#163.com
//日期:2023-03-02 
	//处理所有项目,推荐判断项目是否存在
	stDstDir = CStdStr::AddSlashIfNeeded(stDstDir);
	for (size_t i = 0; i < nItemCount; ++i)
	{
		const _tstring stCurItem = vItems[i];
		const _tstring stDstItem = stDstDir + CStdStr::GetNameOfFile(stCurItem);

#ifdef ITEM_ONLY_FILE
		if (CStdFile::IfAccessFile(stCurItem) && IsProperSuffix(stCurItem, m_cfg.vSuffixs))
		{
			ProcessFile(stCurItem, stDstItem, m_cfg);
		}
#endif // ITEM_ONLY_FILE

#ifdef ITEM_ONLY_DIR
		//如果是目录
		if(PathIsDirectory(stCurItem.c_str()))
		{
			//处理文件夹
			std::vector<_tstring> vSubFiles;
			size_t nSubFileCount = getFiles(stCurItem, vSubFiles, m_cfg.vSuffixs, bIncludeSub);

			for (int j = 0; j < nSubFileCount; ++j)
			{
				_tstring stSubSrcFile = vSubFiles[j];
				_tstring strSubDstFile = CStdStr::AddSlashIfNeeded(stDstItem) + CStdStr::ReplaceAllDistinct(stSubSrcFile.substr(CStdStr::AddSlashIfNeeded(stCurItem).length()), "\\", "_");

				//保存到根目录
				_tstring stDstFilePath = CStdStr::GetValidFilePath(strSubDstFile);

				CMoveItemsLog::MoveOneItem(stSubSrcFile, stDstFilePath);
			}

			//自动删除空目录
			std::vector<_tstring> vSubDirs;
			size_t nSubDirCount = getDirs(stCurItem, vSubDirs, bIncludeSub);

			for (size_t j = 0; j < nSubDirCount; ++j)
			{
				_rmdir(vSubDirs[j].c_str());
			}
			_rmdir(stCurItem.c_str());
		}
#endif // ITEM_ONLY_DIR

		ppi->SetProgressValue(i + 1, nItemCount);
	}

软件成品暂未公开,但关键源代码已经提供了,可以参考一下,自行实现功能即可。

如果仅仅需要软件成品的,可以私信我取得联系。

想要全套源代码的,也可以私信我取得联系,一起学习交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值