c++ 替换修改一个文件夹下的所有文件的文件名
2024-08-24 23:50:39
代码简洁,亲测可用。
1,首先来获取(输出)一个文件夹中所有的文件名
void getFiles(string path, vector<string>& files)
{
//文件句柄
long hFile = ;
//文件信息
struct _finddata_t fileinfo;
string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -)
{
do
{
//如果是目录,迭代之
//如果不是,加入列表
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name, ".") != && strcmp(fileinfo.name, "..") != )
getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
}
else
{
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == );
_findclose(hFile);
}
}
void main()
{
InitConsoleWindow1();
char * filePath = "E:/gait/004";
vector<string> files; getFiles(filePath, files); char str[];
int size = files.size();
for (int i = ; i < size; i++)
{
cout << files[i].c_str() << endl;
}
}
因为当时写的是个mfc框架,Initconsolewindow1()是为了能在mfc运行时输出控制台信息
void InitConsoleWindow1()
{
int nCrt = ;
FILE* fp;
AllocConsole();
nCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
fp = _fdopen(nCrt, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, );
}
2,然后替换(修改)其中的某些字符
#include<string>
#include<iostream>
using namespace std; //第一种替换字符串的方法用replace() void string_replace(string&s1,const string&s2,const string&s3)
{
string::size_type pos=;
string::size_type a=s2.size();
string::size_type b=s3.size();
while((pos=s1.find(s2,pos))!=string::npos)
{
s1.replace(pos,a,s3);
pos+=b;
}
} //第二种替换字符串的方法用erase()和insert() void string_replace_2(string&s1,const string&s2,const string&s3)
{
string::size_type pos=;
string::size_type a=s2.size();
string::size_type b=s3.size();
while((pos=s1.find(s2,pos))!=string::npos)
{
s1.erase(pos,a);
s1.insert(pos,s3);
pos+=b;
}
}
3,利用c++改变文件夹内文件的名字,使之变成你修改后的。
rename(oldfilename,newfilename);
oldfilename是char*型,c的这个函数真是很好使啊。
值得注意的是:
1,替换函数,while中的顺序在!=前面是个整体,一开始漏掉那个括号导致没有跳出循环
2,替换函数,整体基本都要在读取文件的while函数中,除了个别不会改变的变量,如a,b的值。之前把string::size_type pos = 0;放在读取文件的while函数外面导致只修改了一个文件的名字。
就酱~
最新文章
- BZOJ1264——[AHOI2006]基因匹配Match
- SelectionSort,选择排序
- HTTP Code
- Linux系统中如何挂载第二块硬盘
- 记录mysql的具体操作明细
- Swift3.0P1 语法指南——基本操作符
- 使用wget
- JavaScript中点号“.”的多义性
- MUI - 手势
- C语言基础:进制转换,变量,常量,表达式,基本数据类型,输出函数,输入函数,运算符. 分类: iOS学习 c语言基础 2015-06-10 21:39 25人阅读 评论(0) 收藏
- Oracle数据库——SQL基本查询
- C#获取当前应用程序所在路径及环境变量
- 备份BinLog并压缩 全备份
- 更改Oracle实例的字符集
- 使用线程执行堆栈StackTraceElement设计Android日志模块
- 实验楼 1. k-近邻算法实现手写数字识别系统--《机器学习实战 》
- 【TRICK】解决锚点定位向下浮动Xpx问题
- iOS 中判断应用程序是否为第一次打开
- git上clone需要ssh时
- 腾讯的产品思维 VS 阿里的终局思维