整理一下网上学习到的Visual studio 2015版的获取文件中文件的程序
一、获取当前文件夹中的图片
下面程序是获取当前文件夹中的所有“bmp”图片并将路径保存到名为“file_container”的容器中,然后利用OpenCV的Mat将图片读取。注意,这里并不遍历子文件。
#include<opencv2\opencv.hpp>
#include<io.h>
using namespace cv;
using namespace std;
#define LOAD_PATH "F:\\data"
#define DATA_TYPE "bmp"
void GetAllPicture(vector<string>&files);
int main()
{
vector<string>file_container;
Mat srcImg;
GetAllPicture(file_container);
for (size_t i = 0; i < file_container.size(); i++)
{
srcImg = imread(file_container[i].c_str());
imshow("图像", srcImg);
waitKey(1);
}
return 1;
}
/*获取当前文件夹下的所有图片文件*/
void GetAllPicture(vector<string>&files)
{
_finddata_t fileinfo;
long DataHandle;
string path;
if ((DataHandle =_findfirst(path.append(LOAD_PATH).append("\\*.").append(DATA_TYPE).c_str(),&fileinfo))==-1L)
{
cout << "PATH ERROR!" << endl;
return;
}
else
{
do
{
path.clear();
//cout << "FILE NAME :" << fileinfo.name<< endl;
files.push_back(path.append(LOAD_PATH).append(fileinfo.name));
} while (_findnext(DataHandle,&fileinfo)==0);
}
_findclose(DataHandle);
return;
}
二、获取当前文件夹和所有子文件夹中的图片
下面程序是遍历给定路径中所有的文件夹(包含所有子文件夹)中的“BMP”、“JPG”格式(这里可以选择输出任意格式的文件,只需要把对应代码出的文件后缀改变即可)并将图片输出到名为“files”的VECTOR 容器中
#include<opencv2\opencv.hpp>
#include<io.h>
using namespace cv;
using namespace std;
#define LOAD_PATH "F:\\data"
void GetAllFilesToVector(string folderPath,vector<string>&files);
int main()
{
vector<string>file_container;
Mat srcImg;
string File_Ergodicity;
File_Ergodicity.append(LOAD_PATH);
GetAllFilesToVector(File_Ergodicity, file_container);
for (size_t i = 0; i < file_container.size(); i++)
{
srcImg = imread(file_container[i].c_str());
imshow("图像", srcImg);
waitKey(10);
}
return 1;
}
/*遍历文件夹和子文件夹*/
void GetAllFilesToVector(string folderPath, vector<string>&files)
{
long FilesHandle;
_finddata_t fileinfo;
string FilesPath = folderPath + "\\*";
if ((FilesHandle = _findfirst(FilesPath.c_str(), &fileinfo)) == -1L)
{
cout << "PATH ERROR!" << endl;
return;
}
do
{
string newPath;
//判断是否有子目录
if (fileinfo.attrib & _A_SUBDIR)
{
if ((strcmp(fileinfo.name,".")!=0)&&(strcmp(fileinfo.name,"..")!=0))
{
newPath = folderPath + "\\" + fileinfo.name;
GetAllFilesToVector(newPath, files);
}
else{}
}
else
{
if ((strstr(fileinfo.name,".bmp")!=NULL)|| (strstr(fileinfo.name, ".jpg") != NULL))
{
newPath = folderPath + "\\" + fileinfo.name;
files.push_back(newPath);
}
else
return;
}
} while (_findnext(FilesHandle,&fileinfo)==0);
_findclose(FilesHandle);
return;
}
三、获取当前文件夹和所有子文件夹中的图片,并输出到TXT文件中
#include<opencv2\opencv.hpp>
#include<io.h>
#include<fstream>
#define LOAD_PATH "F:\\data"
using namespace cv;
using namespace std;
void DataFolder(string folderPath, ofstream &fout);
int main()
{
vector<string>file_container;
Mat srcImg;
//遍历文件夹和子文件夹,并输出到txt
ofstream ofs("sad.txt");
DataFolder(File_Ergodicity,ofs);
for (size_t i = 0; i < file_container.size(); i++)
{
srcImg = imread(file_container[i].c_str());
imshow("图像", srcImg);
waitKey(10);
}
return 1;
}
/*遍历文件夹和子文件夹,并输出到txt*/
void DataFolder(string folderPath, ofstream &fout)
{
_finddata_t FileInfo;
string strfind = folderPath + "\\*";
long Handle = _findfirst(strfind.c_str(), &FileInfo);
if (Handle == -1L)
{
cerr << "can not match the folder path" << endl;
exit(-1);
}
do {
//判断是否有子目录
if (FileInfo.attrib & _A_SUBDIR)
{
//这个语句很重要
if ((strcmp(FileInfo.name, ".") != 0) && (strcmp(FileInfo.name, "..") != 0))
{
string newPath = folderPath + "\\" + FileInfo.name;
dfsFolder(newPath, fout);
}
}
else
{
fout << folderPath << "\\" << FileInfo.name << " ";
}
} while (_findnext(Handle, &FileInfo) == 0);
_findclose(Handle);
fout.close();
return;
}