#include "stdafx.h"
#include <io.h>
#include <fstream>
#include <string>
#include <vector>
#include <iostream>
#include <stdlib.h>
#include <direct.h>
#include <string.h>
#include <io.h>
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <process.h>
#include <windows.h>
using namespace std;
//其实两个字符串连在一起比如string可惜写成:str1+str2+“xxx”。。。
//获取所有的文件名
void GetAllFiles(string path, vector<string>& files,string searchStr)
{
long long hFile = 0;
//文件信息
struct _finddata_t fileinfo;//用来存储文件信息的结构体
string p;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) //第一次查找
{
do
{
cout << fileinfo.name <<endl;
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, searchStr);
}
}
else //如果查找到的不是是文件夹
{
//files.push_back(p.assign(fileinfo.name)); //将文件路径保存,也可以只保存文件名: p.assign(path).append("\\").append(fileinfo.name)
string curStr = p.assign(fileinfo.name);
if (curStr== searchStr)
{
cout << p.assign(path).append("\\").append(fileinfo.name) << endl;
files.push_back(p.assign(path).append("\\").append(fileinfo.name));
}
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile); //结束查找
}
}
//获取特定格式的文件名
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(fileinfo.name)); //将文件路径保存,也可以只保存文件名: p.assign(path).append("\\").append(fileinfo.name)
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
// 该函数有两个参数,第一个为路径字符串(string类型,最好为绝对路径);
// 第二个参数为文件夹与文件名称存储变量(vector类型,引用传递)。
// 在主函数中调用格式(并将结果保存在文件"AllFiles.txt"中,第一行为总数):
#define BUF_SIZE 256
int copyFile(const char * pSrc, const char *pDes)
{
FILE *in_file, *out_file;
char data[BUF_SIZE];
size_t bytes_in, bytes_out;
long len = 0;
if ((in_file = fopen(pSrc, "rb")) == NULL)
{
perror(pSrc);
return -2;
}
if ((out_file = fopen(pDes, "wb")) == NULL)
{
perror(pDes);
return -3;
}
while ((bytes_in = fread(data, 1, BUF_SIZE, in_file)) > 0)
{
bytes_out = fwrite(data, 1, bytes_in, out_file);
if (bytes_in != bytes_out)
{
perror("Fatal write error.\n");
return -4;
}
len += bytes_out;
//printf("copying file .... %d bytes copy\n", len);
}
fclose(in_file);
fclose(out_file);
return 1;
}
int copyDir(const char * pSrc, const char *pDes)
{
if (NULL == pSrc || NULL == pDes) return -1;
_mkdir(pDes);
char dir[MAX_PATH] = { 0 };
char srcFileName[MAX_PATH] = { 0 };
char desFileName[MAX_PATH] = { 0 };
char *str = "\\*.*";
strcpy(dir, pSrc);
strcat(dir, str);
//首先查找dir中符合要求的文件
long long hFile;
_finddata_t fileinfo;
if ((hFile = _findfirst(dir, &fileinfo)) != -1)
{
do
{
strcpy(srcFileName, pSrc);
strcat(srcFileName, "\\");
strcat(srcFileName, fileinfo.name);
strcpy(desFileName, pDes);
strcat(desFileName, "\\");
strcat(desFileName, fileinfo.name);
//检查是不是目录
//如果不是目录,则进行处理文件夹下面的文件
if (!(fileinfo.attrib & _A_SUBDIR))
{
copyFile(srcFileName, desFileName);
}
else//处理目录,递归调用
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
{
copyDir(srcFileName, desFileName);
}
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
return 1;
}
return -3;
}
string UTF8ToGB(const char* str)
{
string result;
WCHAR *strSrc;
LPSTR szRes;
//获得临时变量的大小
int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
strSrc = new WCHAR[i + 1];
MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);
//获得临时变量的大小
i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
szRes = new CHAR[i + 1];
WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);
result = szRes;
delete[]strSrc;
delete[]szRes;
return result;
}
std::string UTF8ToGB(const char* str)
{
std::string result;
WCHAR *strSrc;
LPSTR szRes;
//获得临时变量的大小
int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
strSrc = new WCHAR[i + 1];
MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);
//获得临时变量的大小
i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
szRes = new CHAR[i + 1];
WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);
result = szRes;
delete[]strSrc;
delete[]szRes;
return result;
}
int main()
{
string filePath = "C:\\Users\\Yuri\\Desktop\\中间结果";
vector<string> files;
char * distAll = "AllFiles.txt";
string pathStore = "D:\\packge";
//读取所有的文件,包括子文件的文件
//GetAllFiles(filePath, files);
//读取所有格式为jpg的文件
string format = "1.txt";
string searchStr = "ngMap.jpg";
ifstream fileIn;
fileIn.open("1124.txt", ios::in);
string strLine;
int i = 0;
while (getline(fileIn, strLine))
{
strLine = UTF8ToGB(strLine.c_str()).c_str();
cout << strLine<< endl;
if (i == 0)
{
filePath = strLine;
}
else if(i==1)
{
searchStr = strLine;
}
else if(i==2)
{
pathStore = strLine;
}
i++;
}
GetAllFiles(filePath, files, searchStr);
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;//输出到屏幕
//string pathSrc = files[i];
//pathSrc = pathSrc.substr(0, pathSrc.find_last_of("\\"));
//string name = pathStore +"\\"+pathSrc.substr(pathSrc.find_last_of("\\")+1);
//copyDir(pathSrc.c_str(), name.c_str());
}
ofn.close();
return 0;
}
读取单文件夹下面的文件
于 2022-05-25 17:04:37 首次发布