使用c++重命名文件

在编译完FPGA的版本后,需要把bit文件和cdc发给其他人进行测试,由于两个文件和FPGA工程同名,每次都要重命名,加上今天的日期,便于版本控制。以上就是需求。于是想到要不要写个脚本,一键运行改名,最先想到的是用bat脚本,感觉没学过太麻烦,于是想到用c++,刚好最近在看string类相关的,于是花了点时间弄了一个控制台程序。代码如下:

//filesrename.cpp
#include 
#include
#include
#include
#include
#include 
using namespace std;
bool IsExisteDirectory(string path)
{
	if (-1 != _access(path.c_str(), 0))
	{
		return true;
	}
	return false;
}
void getFiles(string path, vector<string>& files)
{
	//文件句柄
	long   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))
			{
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
					getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
			}
			else
			{
				//files.push_back(p.assign(path).append("\\").append(fileinfo.name));
				files.push_back(fileinfo.name);
			}
		} while (_findnext(hFile, &fileinfo) == 0);
		_findclose(hFile);
	}
}
bool AlterFileName(string path,string filename, string newname)
{
	filename = path + '\\' + filename;
	newname = path + '\\' + newname;
	//获取后缀
	string suffix = "";
	if (filename.rfind('.') != filename.npos)
	{
		suffix = filename.substr(filename.rfind('.'));
		newname += suffix;
	}
	// int rename(char *oldname, char *newname);
	// 更改文件名,成功返回0,否则返回-1
	if (-1 == rename(filename.c_str(), newname.c_str()))
	{
		return false;
	}
	return true;
}

void main()
{
	string path = _pgmptr;// exe文件所在目录,带*.exe
	cout << path<< endl;
	string newdir = "phl";
	string m_strPath = path.substr(0, path.find_last_of('\\') + 1);// 给m_strPath赋初值
		   m_strPath += newdir;//新文件夹路径
	if (!IsExisteDirectory(m_strPath))
	{
		string str = "md \"" + m_strPath + "\"";
		//命令行操作md(make dir);\"代表双引号字符;md "D:\c++\filerename\filerename\Debug\phl"
		system(str.c_str());//string 转成const cahr*
	}
	vector<string >files;
	getFiles(m_strPath, files);//获取带后缀的文件名

	//测试控制台
	//string ip = "10.3.8.211";
	//string p = "ping "+ip;
	//system(p.c_str());

	//获取系统时间
	time_t rawtime;
	time(&rawtime);
	char   pblgtime[20];
	strftime(pblgtime, 20, "%Y_%m_%d", localtime(&rawtime));
	cout << "strftime   " << pblgtime << endl;
	string data_str(pblgtime);
	for (int i = 0; i < files.size(); i++)
	{
		if (AlterFileName(m_strPath, files[i], data_str) == 1)
			cout << "rename success" << endl;
		else
			cout << "rename error" << endl;
	}
}

简单介绍以下这个程序的功能,这个程序获取filesrename.exe所在的文件夹,判断这个文件夹下是否有一个文件夹“phl”,如果没有则创建之,然后获取“phl“文件夹下的所有文件名(包括后缀名),并存储起来,然后对这些文件进行命名,命名格式暂定为当前日期,同时保持后缀名不变。

这个程序包含了文件路径和文件名的获取,系统时间的获取,新建文件夹的操作,重命名的操作,以及字符串的相关操作。
参考内容有如下:
https://blog.csdn.net/jenny_84/article/details/44804141
https://www.cnblogs.com/anhuizhj/p/3806380.html
http://www.cjjjs.com/paper/xmkf/6272015363818304.aspx

你可能感兴趣的:(C++)