动手实现查找小工具:优化版FindEverything
项目背景和意义
查找指定路径下文件名包含某个字段的文件,并打印出来
软件界面设计
部分源代码说明:
【选择】按钮双击事件实现方法,打开文件对话框选择路径:
void CFindEverythingDlg::OnBnClickedButton1()
{// TODO: Add your control notification handler code hereTCHAR szFolderPath[MAX_PATH] = {0}; CString strFolderPath = TEXT(""); BROWSEINFO sInfo; ::ZeroMemory(&sInfo, sizeof(BROWSEINFO)); sInfo.pidlRoot = 0; sInfo.lpszTitle = _T("请选择待分类图片位置"); sInfo.ulFlags = BIF_RETURNONLYFSDIRS|BIF_EDITBOX|BIF_DONTGOBELOWDOMAIN; sInfo.lpfn = NULL; // 显示文件夹选择对话框 LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo); if (lpidlBrowse != NULL) { // 取得文件夹名 if (::SHGetPathFromIDList(lpidlBrowse,szFolderPath)) { strFolderPath = szFolderPath; } } if(lpidlBrowse != NULL) { ::CoTaskMemFree(lpidlBrowse); } m_path=strFolderPath; //选择的查找路径显示在文本框IDC_EDIT1中GetDlgItem(IDC_EDIT1)->SetWindowTextW(strFolderPath);
}
【查找】按钮实现方法,
void CFindEverythingDlg::OnBnClickedButton2()
{// TODO: Add your control notification handler code hereMyCountFile m_CountFile;vector<string> mvfiles,mvPaths;CString findstr;GetDlgItem(IDC_EDIT2)->GetWindowTextW(findstr);m_CountFile.GetAndPrintFileNames(StringAbout::toString(m_path),mvPaths,StringAbout::toString(findstr));
}
代码中的MyCountFile类的源代码在后面,StringAbout::toString()函数的实现方法参考:string与Cstring字符串类型转换和其他操作总结
查找D:\Program Files (x86)\opencv\build\x86\vc10\lib路径下的d.lib字段,生成filelist文件,fileList.txt文件与FindEverything.exe在同一个文件夹下,如下图所示一共找到38项文件
MyCountFile.h头文件
#pragma once
#include <string.h>
#include <vector>
#include <list>
using namespace std;class MyCountFile
{
public:MyCountFile(void);~MyCountFile(void);
private:vector<string> sourcefiles;
public:void GetAndPrintFileNames(string sourcePath,vector<string> &vsrcPath,string findstr);void getAllFiles(string path, vector<string>& files,string findstr);
};
MyCountFile.cpp文件
#include "StdAfx.h"
#include "MyCountFile.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include "io.h"MyCountFile::MyCountFile(void)
{
}MyCountFile::~MyCountFile(void)
{
}void MyCountFile::GetAndPrintFileNames(string sourcePath,vector<string> &vsrcPath,string findstr)
{vector<string> sourcefiles;vector<string> files;char* sourcedist = "fileList.txt";getAllFiles(sourcePath, sourcefiles,findstr);vsrcPath.clear();vsrcPath=sourcefiles;//将vector中的string保存在txt文件中ofstream ofn(sourcedist);int size = sourcefiles.size();ofn << size << endl;for (int i = 0; i < size; i++) {ofn << sourcefiles[i] << endl;}ofn.close();
}void MyCountFile::getAllFiles(string path, vector<string>& mfiles,string findstr)
{//文件句柄long hFile = 0;//文件信息struct _finddata_t fileinfo; //很少用的文件信息读取结构string p; //string类很有意思的一个赋值函数:assign(),有很多重载版本string a = p.assign(path).append("\\*").c_str();if ((hFile = _findfirst(p.assign(path).append("\\*").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));getAllFiles(p.assign(path).append("\\").append(fileinfo.name), mfiles,findstr);}}else{int m = path.find(findstr);string name = fileinfo.name;int n = name.find(findstr);string sub=name.substr(n+1,name.length()-1);if(m>0||n>0){mfiles.push_back(p.assign(path).append("\\").append(fileinfo.name));}}} while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1_findclose(hFile);}
}
动手实现查找小工具:优化版FindEverything相关推荐
- colorpix取色小工具_Python版的取色器
大家好,好久没有更新,希望不要把我忘了啊,前几天工作中遇到一个小困难,我想去取一个图片某个区域的色值需要用一下,但是真的不知用什么工具,然后把图片发给同事,用他电脑上的PS查看了一下,感觉工作中没有一 ...
- 2345好压3款小工具提取版
介绍 2345好压中提取的md5校验.批量文件名修改.批量字符替换小工具,是你办公处理文件的好帮手. 下载地址 http://www.bytepan.com/FpkVxtW8ufG 图片
- 计算机桌面开辟一个小桌面,电脑桌面图标异常怎么办,那就自己动手做一个小工具快速修复吧...
不知小伙伴们有没有遇到过这样的情况,电脑有时候用着用着就莫名其妙的出现一些奇怪的图标,好比本来桌面的图标本来就只是带个箭头的快捷方式,但是有时候却会莫名的出现蓝底的图标,甚至出现带小方框的图标,丑的要 ...
- QQ小工具网页版源码
介绍: 全部替换新的接口 网盘下载地址: http://kekewl.net/WMsOv7nuYRM0 图片:
- win10电脑桌面透明便签_DesktopNoteOK桌面便签小工具下载|windows10桌面透明便签插件_最火软件站...
使用DesktopNoteOK桌面便签小工具,用户在电脑桌面上快速创建笔记,通过设置笔记的选项来创建不一样的笔记类型,桌面笔记有多个主题,随机背景和文本颜色,让笔记变得更加丰富多彩,现在最火软件站提供 ...
- 古诗词取名小工具2.0-已开源
古诗词取名小工具2.0已上线,本次选择了开源项目 仓库地址: chinese-poetry-namerhttps://github.com/wz930206/chinese-poetry-namerP ...
- 印象笔记桌面版怎么导出html,三个小工具帮你搞定印象笔记模版
最近很多人都在问我印象笔记模版的问题,而且最近自己的模版笔记的分享人数也直奔500而去,但是坦率的讲自己很少使用印象笔记的模板.即便如此,印象笔记的模板在日常的使用中也确实有其作用,恰当的使用模板能起 ...
- python查询文件软件_Python小工具--多文件查找字符串fs
前几天,在看Android的makefile时,为方便自己在make文件查找字符串,用perl写了个小工具,实现的功能就是在目录下的多个文本文件中查找字符串.那个工具在同事的帮助下,已经实现了不少功能 ...
- textarea支持a标签_微慕小程序开源版A标签优化说明
微慕WordPress小程序所有版本里,对于文章详情里文字内容的解析,都是通过开源组件:wxParse:不过这个组件已经停止维护,微慕小程序在这个组件上做了一些优化,让文章里文字在小程序显示更加完美. ...
最新文章
- Android媒体相关开发应用程序接口
- 学习招投标相关知识-编写标书
- java 连接sqlitle_ASP连接SQL2005数据库连接代码
- python selenium 点击开始按钮_使用Selenium和Python单击一个按钮
- SurfaceView闪烁问题
- java 解析数据包_java - 如何在Java中正确解析TCP数据包? - 堆栈内存溢出
- int在c语言中的作用,C语言中int,Uint,uint16等有什么区别以及用处
- SQL数据库学习心得
- UTC和GMT时间区别
- HTML常见标签学习
- 2021-10-07 浊音,清音,爆破音频谱分析
- 【linux内核分析与应用-陈莉君】虚拟文件系统的主要数据结构
- 动态内存的申请和非动态内存的申请_公安交管新举措咋解读?非营运七座车6年免检,70岁可申请驾照...
- 计算机自定义大小修改数值,如何将电脑excel文档中的单元格颜色设置为根据数值大小自动修改...
- Java虚拟机(三)--------GC算法和收集器
- 飞控和飞控固件的讲解
- php如何每三位逗号分开,PHP 数字格式化,数字每三位加逗号的简单示例
- windows defender might impact performance
- 如果运气不好,就试试勇气
- 分布式存储综述与方案选型
热门文章
- power bi 跨表计算_现代企业BI使命之打造数据文化——微软Build大会PowerBI解读
- android 电量排行榜,续航时间长的安卓手机有哪些?2020长续航安卓手机排行榜
- java—— 深入理解contains方法
- 服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因)。未能加载文件或程序集“XXXXXX”或它的某一个依赖项。拒绝访问。
- 【安卓注意事项】模仿猎豹清理大师波效应
- camera曝光和帧率
- 【转】数字图像处理中的形态学
- 适合不想露脸的普通人做,把一段文字制作成视频,一周挣了2564
- 如何自动切换 iTunes MiniPlayer?
- golang utf8编码转字符串