您的位置:首页 > 编程语言 > C语言/C++

文件搜索查找功能VC++

2015-02-02 17:11 274 查看
1.搜索指定文件夹下的文件名和路径

#undef UNICODE

#include <iostream>
#include <string>
#include <vector>
#include <memory>
#include <cstring>

#include <windows.h>

std::shared_ptr<std::vector<std::string> >  fileList(const std::string& folder_path)
{
static std::shared_ptr<std::vector<std::string> >
folder_files(new std::vector<std::string>); //返回指针, 需要迭代使用

WIN32_FIND_DATA FindData;
HANDLE hError;

int file_count(0);
std::string file_path(folder_path); //路径名
std::string full_file_path; //全路径名

file_path.append("/*.*");
hError = FindFirstFile(file_path.c_str(), &FindData);
if (hError == INVALID_HANDLE_VALUE) {
std::cout << "failed to search files." << std::endl;
return nullptr;
}
while(FindNextFile(hError, &FindData))
{
//过虑".", "..", "-q"
if(0 == strcmp(FindData.cFileName, ".") ||
0 == strcmp(FindData.cFileName, "..") ||
0 == strcmp(FindData.cFileName, "-q"))
{
continue;
}

//完整路径
full_file_path.append(folder_path);
full_file_path.append("/");
full_file_path.append(FindData.cFileName);
++file_count;

if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
//std::cout << file_count << " " << full_file_path << "<Dir>" << std::endl;
fileList(full_file_path);
}else{
folder_files->push_back(full_file_path);
//std::cout << file_count << " " << full_file_path << std::endl;
}
full_file_path.clear(); //清空目录
}
return folder_files;
}

int main(void)
{
std::shared_ptr<std::vector<std::string> > folder_files;
folder_files = fileList("E:/bf");
if (folder_files) {
for (size_t i=0; i != folder_files->size(); ++i) {
std::cout << i+1 << " : " << (*folder_files)[i] << std::endl;
}
}
return 0;
}


View Code



#include<afx.h>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR  filePath[255]=L"*.*";
CFileFind finder;
BOOL bFinderResult = finder.FindFile(filePath);
//std::cout << filePath << std::endl;
while (bFinderResult!=false)
{
bFinderResult=finder.FindNextFileW();
CString szRepeter = finder.GetFileName();
//const int iSize = szRepeter.GetLength();
char bufFileName[255];
WideCharToMultiByte(0, 0, szRepeter, 255, bufFileName, 255, NULL, false);
//fFileName = (LPCTSTR)szRepeter;
std::cout << bufFileName << std::endl;
}
system("pause");
return 0;
}
//注意要设置共享MFC中使用.


更多可以参看:/article/1303811.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: