WIndows下提取一个文件夹下的文件名list

背景:WIndows下,提取一个文件夹下的文件名list(不带后缀名)

实现代码

//获取文件路径下的文件名
void getFiles(string path, vector& files){
	// 文件句柄
	long   hFile = 0;
	//文件信息  
	struct _finddata_t fileinfo;

	string p;
	if ((hFile = _findfirst(p.assign(path).append("\\*.xml").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));
			}
		} while (_findnext(hFile, &fileinfo) == 0);
		_findclose(hFile);
	}
}

//将文件路径下的xml文件的名字(编号)写入txt文件
void extractXMLno(std::string &xmlPath, std::vector &XmlNos){

	//std::fstream fw("xmlNo130w.txt", std::ios::out);
	std::vector fileNames;
	getFiles(xmlPath, fileNames);
	int num = 0;
	for (int i = 0; i < fileNames.size(); i++){
		std::string fileName = fileNames[i];
		std::string::size_type pos1 = fileName.find("\\"), pos2 = fileName.find(".xml");
		if (pos1 != fileName.npos&& pos2 != fileName.npos){
			fileName = fileName.substr(pos1 + 1, pos2 - pos1 - 1);
			XmlNos.push_back(fileName);
			//fw << fileName << "\n";
			num++;
		}
		else{
			printf("incorrect filename %s\n", fileName);
			return;
		}

	}
	//fw.close();
	printf("xmlfiles Num: %d   comNum: %d\n", fileNames.size(), num);
	return;
}

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