实现Windows文件复制名称自动变更功能

目录

前沿

讲解

功能

1:开发环境

2:界面

3:复制实现

链接


前沿

看到这个功能,有些人会有一点蒙的感觉,什么叫做复制文件时,名称自动变更呢?那么看下面的展示效果你就明白喽~

实现Windows文件复制名称自动变更功能_第1张图片

讲解

选择需要复制的文件名称,点击"复制"按钮后,对文件名进行多次复制,假设右侧列表中存在相同的名称后,在文件名称之后添加"-副本",多次复制后,只是增加副本后面的数字。

这个功能是怎么来的呢?

前一阵子,一直在复制粘贴文件,我就在想window自带的这个功能还挺好用的,那是如何实现的呢?就想尝试着试一试,就当练手了,反正最近的项目不是很忙,后来,就做了这样一个功能。

接下来,我就来讲解下是如何实现界面上这些操作的吧~

后续我会把工程链接放过来,如果有觉得看讲解麻烦的,可以直接到下面查看。

功能

1:开发环境

VS2017 + Qt5.14.2

2:界面

当前界面用到的控件信息

实现Windows文件复制名称自动变更功能_第2张图片

控件1:QListWidget

用于展示需要复制的文件名称,可以指定某个目录,从目录中读取。

控件2:QPushButton

复制按钮,选中左侧列表中的文件名之后进行复制。

控件3:QListWidget

展示复制后的文件名称。

3:复制实现

对于这么一个简单的功能来说,最最核心的也就是这部分了。

对于右侧的QListWidget控件上展示的内容,这里用一个容器存储,保证所有的文件名不重复。

容器:std::vector m_vetCopyFilesName;

查询流程:

1:判断容器中是否存在需要复制的文件名,如果不存在说明是第一个文件信息,不处理。

2:查询到容器中存在相同的名称后,进行特殊处理

3:被查询的文件名不存在"-副本",字样时,说明是第一次复制,起名叫做"xxx-副本1";

4:被查询的文件名中存在"-副本",字样时,获取副本后面的编号,进行追加+1

5:重新组合名称的文件名,递归该函数,再次判断,直到没有重复的文件名即可。

代码实现:

bool bFind = false; //未查询到名称一致的附件信息
for (int i = 0; i < m_vetCopyFilesName.size(); i++)
{
	std::string sTempFileName = m_vetCopyFilesName[i];
	if (sTempFileName == sFileName)
	{
		//说明:是副本的副本,只需要更改名字最后一位的编号
		int nPosTemp = sTempFileName.rfind(".");
		std::string sSuffix = sTempFileName.substr(nPosTemp, sTempFileName.length() - nPosTemp);
		//说明:名称相同,需要在后面添加副本标识
		if (sTempFileName.find("-副本") != -1)
		{
			//获取副本个数
			std::string sTempNum = sTempFileName.substr(nPosTemp - 1, 1);
			int nNum = atoi(sTempNum.c_str()) + 1;
			sFileName = sTempFileName.substr(0, nPosTemp - 1) + std::to_string(nNum) + sSuffix;
		}
		else
		{
			//说明:是第一个需要创建的副本
			sFileName = sTempFileName.substr(0, nPosTemp) + "-副本1" + sSuffix;
		}
		this->JudgeUploadFilesName(sFileName);
	}
}

链接

文本名复制https://download.csdn.net/download/qq_32716885/75249384

 

今天的更新就到这里喽~

我是糯诺诺米团,一名C++开发程序媛~

你可能感兴趣的:(Qt,windows,c++,qt)