C++去除文件名空格字符

最近有一个项目需要大量的图片进行训练,发现图片集中名字含有空格造成一些图片的提取工具总是进行不下去,最后跟源码发现gets等一些C函数会截断。由于目前本人只会C/C++,故此百度了一下还真有相关的C++处理方法。这里就源代码呈现出来。方便大家使用。注意下面的代码都是在网上结合部分代码然后自己整理得到,如有错误请指正。

// 去除文件名的空格.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "pch.h"


#include   
#include   
#include   
#pragma warning(disable:4996)
#include
#include
using namespace std;

char *strRemov(char* dst, const char* src, char ch = ' ')
{
	int i = -1, j = 0;
	while (src[++i])
		if (src[i] != ch)//
			dst[j++] = src[i];
		else//遇到空格 跳过去就行了
			;

	dst[j] = '\0';
	return dst;
}


vector findfileinfolder(string fileFolderPath, string fileExtension)
{
	string fileFolder = fileFolderPath + "\\*." + fileExtension;
	vector file;

	// 遍历文件夹  
	char fileName[2000];

	struct _finddata_t fileInfo;    // 文件信息结构体  

	// 1. 第一次查找  
	long findResult = _findfirst(fileFolder.c_str(), &fileInfo);
	if (findResult == -1)
	{
		_findclose(findResult);
		return file;
	}
	// 2. 循环查找  
	bool flag = 0;

	do
	{
		sprintf(fileName, "%s\\%s", fileFolderPath.c_str(), fileInfo.name);

		if (fileInfo.attrib == _A_ARCH)  // 是存档类型文件  
		{
			char newname[100];
			strRemov(newname, fileName, ' ');

			int t = rename(fileName, newname);
			//判断遇到的错误,可以在后面直接输出errno  cout <<"return:" < jpg = findfileinfolder("D:\\图片", "jpg");
int main()
{
	cout << "鼠标右键粘贴即可:" << endl;
	cout << "输入文件夹绝对路径(中间不能有空格):" << endl;
	string fileFolderPath;
	cin >> fileFolderPath;

	cin.ignore(1000, '\n');

	cout << "输入文件后缀名:如jpg" << endl;
	string fileExtension;
	cin >> fileExtension;


	vector jpg = findfileinfolder(fileFolderPath, fileExtension);
	cout << "该目录下共有" << fileExtension << "文件:" << jpg.size() << "个" << endl;


	getchar();
	return 0;

}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门提示: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

以上代码再VS 下创建控制台工程即可。运行输入路径和后缀,就会把空格去掉。同时有兴趣的同学可以继续再此上做一些去除% ¥ @ # 等文件名中含有特殊符号的 去除都可以。有时候我会做一个可视化的操作工具。。敬请期待吧。。

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