c++获取文件名

来源:互联网 发布:java方法的命名规则 编辑:程序博客网 时间:2024/05/21 09:55

有的时候需要对一个具体的类型文件进行操作后,存入另一种类型的文件中(如提取语音文件.wav文件中的相关信息,然后存入同名的.txt文件中去)

本文介绍一种方法来获取文件名,如对于文件D:\code\test\sample000.wav到D:\code\test\sample100.wav这100个文件,获取它们的相关信息然后存入到同名的txt文件中去。

首先要获得该文件下的所有文件,具体方法如下:使用struct _finddata_t这个数据结构来打开文件,通过新建一个容器来存储所有的文件名。

void getAllFiles(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){files.push_back(p.assign(path).append("/").append(fileinfo.name));getAllFiles(p.assign(path).append("/").append(fileinfo.name), files);}}else{//files.push_back(p.assign(path).append("\\").append(fileinfo.name));files.push_back(p.assign(fileinfo.name)); //只保存文件名}} while (_findnext(hFile, &fileinfo) == 0);  //寻找下一个,成功返回0,否则-1_findclose(hFile);}}

在获取了所有文件名之后,就可以使用strcpy函数来处理字符串了,这里需要将vector<string>转化成字符串才可以处理。

do{int pos = 0;char txtName[100];pos = files[n].find(".wav");strcpy(txtName, (files[n].replace(pos,4,".txt")).c_str());//string转char[]




原创粉丝点击