c++批量读取文件------获取文件名

在最近的一个项目中,需要用c++读取6000多个文件。大家都知道,c++读取文件的能力没有Java等语言那么强大,但是在经过了一系列的尝试之后,成功了。在实施过程中将其分为两步,便于理解。

(1)获取需要读取的文件的所有文件名,并保存到filepath.txt中 ;

(2)每次从filepath.txt中读取一行作为路径,最后用一个“for循环”,或者feof()函数控制结束。


一、以下共享获取文件名的程序,保证直接可以运行。

 
 
#include "stdafx.h"
#include <iostream>
#include "fstream"
#include "string"
#include "StrmidO.h"
#include <io.h>   
#include <vector>  

using namespace std;

int main()
{
	FILE *filepath;
	filepath = fopen("E:\\Jsonpath.txt", "a");
	long Handle;
	struct _finddata_t FileInfo;
	if ((Handle = _findfirst("E:\\工程管理数据\\jsons\\*.json", &FileInfo)) == -1L)
		printf("没有找到匹配的项目\n");
	else
	{
		printf("%s\n", FileInfo.name);
		fprintf(filepath, "E:\\工程管理数据\\jsons\\%s\n", FileInfo.name);
		while (_findnext(Handle, &FileInfo) == 0)
			/*printf("E:\\%s\n", FileInfo.name);*/
		fprintf(filepath, "E:\\工程管理数据\\jsons\\%s\n", FileInfo.name);
		_findclose(Handle);
	}
	return 0;
}

通过以上程序可以获取任意路径下的所有文件名,然后以自己想要的路径输出!


二、以下程序可以寻找你感兴趣的任意文件

#include "stdafx.h"
#include <iostream>
#include "windows.h"
#include <string>
#include <vector>
#include <assert.h>
#include <io.h>   
#include <fstream>

using namespace std;


void GetAllFormatFiles(string path, vector<string>& files, string format)
{
	//文件句柄    
	long   hFile = 0;
	//文件信息    
	struct _finddata_t fileinfo;
	string p;
	if ((hFile = _findfirst(p.assign(path).append("\\*" + format).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) );  
					GetAllFormatFiles(p.assign(path).append("\\").append(fileinfo.name), files, format);
				}
			}
			else
			{
				files.push_back(p.assign(path).append("\\").append(fileinfo.name));
			}
		} while (_findnext(hFile, &fileinfo) == 0);

		_findclose(hFile);
	}
}

int main()
{
	string filePath = "E:\\1271\\1271\\";
	vector<string> files;
	char * distAll = "E:\\AllFiles.txt";

	//读取所有格式为txt的文件  
	string format = ".html";
	GetAllFormatFiles(filePath, files, format);
	ofstream ofn(distAll);
	int size = files.size();
	ofn << size << endl;
	for (int i = 0; i < size; i++)
	{
		ofn << files[i] << endl;
		cout << files[i] << endl;
	}
	ofn.close();
	return 0;
}


BOOL SearchFilesByWildcard(WCHAR *wildcardPath)
{
	HANDLE hFile = INVALID_HANDLE_VALUE;
	WIN32_FIND_DATA pNextInfo;
	FILE *filepath;
	filepath = fopen("E:\\filepath.txt", "w");
	hFile = FindFirstFile(wildcardPath, &pNextInfo);
	if (INVALID_HANDLE_VALUE == hFile)
	{
		return FALSE;
	}

	WCHAR infPath[MAX_PATH] = { 0 };
	if (pNextInfo.cFileName[0] != '.')
	{
		printf("Find result = %ws\r\n", pNextInfo.cFileName);
		fprintf(filepath, "E:\\\\filepath\\\\%ws\r\n", pNextInfo.cFileName);
	}

	while (FindNextFile(hFile, &pNextInfo))
	{
		if (pNextInfo.cFileName[0] == '.')
		{
			continue;
		}

		printf("Find result = %ws\r\n", pNextInfo.cFileName);
	}

	return FALSE;
}
int main(int argc, char* argv[])
{
	setlocale(LC_ALL, "chs");

	查找 abc开头的txt文件  
	printf("Search 1:\r\n");
	for ( ; ; )
	{
		if (pNextInfo.cFileName == NULL)
		{
			break;
		}
		SearchFilesByWildcard(L"E:\\Test\\1*.html");
		printf("\r\n");
	}
	

	查找 abc开头的文件  
	printf("Search 2:\r\n");
	SearchFilesByWildcard(L"E:\\Test\\abc*");
	printf("\r\n");

	查找jnt文件  
	printf("Search 3:\r\n");
	SearchFilesByWildcard(L"E:\\Test\\*.jnt");
	printf("\r\n");

	查找文件名为4个字符的txt文件  
	printf("Search 4:\r\n");
	SearchFilesByWildcard(L"E:\\Test\\????.txt");
	printf("\r\n");

	查找包含"档案"的文件  
	printf("Search 5:\r\n");
	SearchFilesByWildcard(L"E:\\Test\\*档案*");
	printf("\r\n");

	return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_38149046/article/details/80312215