NTFS 文件搜索库
NTFS 文件搜索库
中文 | English
一个快速搜索NTFS卷文件的库
在这里插入图片描述


特性
- 快速扫描 NTFS 格式驱动器上的所有文件
- 实时快速同步文件变更(创建, 更名, 删除)
- 支持通配符查询文件名或文件路径
- 重启自动更新文件变动, 无需重新进行全盘扫描
API描述
-
初始化并指定你关注的驱动器
// // @brief: 初始化(驱动器掩码) // @param: dwDriveIndexMask 驱动器索引掩码(位组合: C: 0x01 D: 0x02 E: 0x04...) // @param: strDbPath 数据库文件路径 // @param: fRebuildDb 是否重建数据库 // @ret: BOOL 操作是否成功 BOOL NTFS_Search_Initialize_By_Drive_Mask(DWORD dwDriveIndexMask, LPCTSTR lpDbPath,bool fRebuildDb );// // @brief: 初始化(驱动器盘符) // @param: strDriveList 驱动器列表, 如: "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // @param: strDbPath 数据库文件路径 // @param: fRebuildDb 是否重建数据库 // @ret: BOOL 操作是否成功 BOOL NTFS_Search_Initialize_By_Drive_Letter(LPCTSTR lpDriveList,LPCTSTR lpDbPath,bool fRebuildDb ); -
重置并指定你关注的驱动器
// // @brief: 重置(驱动器掩码) // @param: dwDriveIndexMask 驱动器索引掩码(位组合: C: 0x01 D: 0x02 E: 0x04...) // @param: strDbPath 数据库文件路径 // @param: fRebuildDb 是否重建数据库 // @ret: BOOL 操作是否成功 NTFSSEARCH_API BOOL NTFS_Search_Reset_By_Drive_Mask(DWORD dwDriveIndexMask,LPCTSTR lpDbPath,bool fRebuildDb );// // @brief: 重置(驱动器盘符) // @param: strDriveList 驱动器列表, 如: "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // @param: strDbPath 数据库文件路径 // @param: fRebuildDb 是否重建数据库 // @ret: BOOL 操作是否成功 NTFSSEARCH_API BOOL NTFS_Search_Reset_By_Drive_Letter(LPCTSTR lpDriveList,LPCTSTR lpDbPath,bool fRebuildDb ); -
获取当前文件总数
// // @brief: 获取当前文件总数 // @ret: LONGLONG 当前文件总数 NTFSSEARCH_API LONGLONG NTFS_Search_GetCount(); -
查询文件, 支持通配符(* 匹配 0 个或多个字符 ? 匹配 1 个字符)
// // @brief: 查询文件路径 // @param: lpKeyword 关键字, 如: "C:\*.zip" // @param: cb 查询回调函数(返回FALSE终止结果枚举) // @param: lpData 回调函数附加参数 // @ret: BOOL 操作是否成功 NTFSSEARCH_API BOOL NTFS_Search_Query(LPCTSTR lpKeyword,NtfsSearchCallback cb,LPVOID lpData ); -
反初始化
// // @brief: 反初始化 // @ret: void 操作是否成功 NTFSSEARCH_API VOID NTFS_Search_Uninitialize();
性能描述
-
拥有较好的性能
- 全盘扫描 77 万文件耗时约 13秒
- 搜索 * 耗时 1.3秒
- 搜索 *.zip 耗时 0.2秒
-
内存占用小
- 77 万 文件数内存占用仅 100MB 左右
-
数据库文件占用
- 77 万 文件数据库存储占用 300+ MB 磁盘空间
使用例子
#include <windows.h>
#include <tchar.h>
#include <locale>
#include <string>
#include <vector>
#include "../NTFS_Search_Lib/include/NTFS_Search_Api.h"#ifdef _UNICODE
using _tstring = std::wstring;
#else
using _tstring = std::string;
#endif#ifndef _DEBUG#ifdef _UNICODE#ifdef _WIN64
#pragma comment(lib, "../NTFS_Search_lib/lib/NTFS_Search_Lib_x64_W.lib")
#else
#pragma comment(lib, "../NTFS_Search_lib/lib/NTFS_Search_Lib_x86_W.lib")
#endif#else#ifdef _WIN64
#pragma comment(lib, "../NTFS_Search_lib/lib/NTFS_Search_Lib_x64_A.lib")
#else
#pragma comment(lib, "../NTFS_Search_lib/lib/NTFS_Search_Lib_x86_A.lib")
#endif#endif#else
#ifdef _UNICODE#ifdef _WIN64
#pragma comment(lib, "../NTFS_Search_lib/lib/NTFS_Search_Lib_x64_WD.lib")
#else
#pragma comment(lib, "../NTFS_Search_lib/lib/NTFS_Search_Lib_x86_WD.lib")
#endif#else#ifdef _WIN64
#pragma comment(lib, "../NTFS_Search_lib/lib/NTFS_Search_Lib_x64_AD.lib")
#else
#pragma comment(lib, "../NTFS_Search_lib/lib/NTFS_Search_Lib_x86_AD.lib")
#endif#endif#endifstd::wstring _MultiStrToWStr(UINT CodePage, const std::string& str)
{int cchWideChar = ::MultiByteToWideChar(CodePage, 0, str.c_str(), -1, NULL, 0);std::wstring strResult(cchWideChar, 0);size_t nConverted = ::MultiByteToWideChar(CodePage, 0, str.c_str(), (int)str.size(), &strResult[0], (int)strResult.size());strResult.resize(nConverted);return strResult;
}_tstring AStrToTStr(const std::string& str)
{
#ifdef _UNICODEreturn _MultiStrToWStr(CP_ACP, str);
#elsereturn str;
#endif
}int _tmain(int argc, LPCTSTR argv[])
{setlocale(LC_ALL, "");clock_t tmBegin = ::clock();clock_t tmEnd = ::clock();_tstring strDriveList = _T("");_tstring strDbPath = _T("");// 初始化NTFS_Search_Initialize_By_Drive_Letter(strDriveList.c_str(), strDbPath.c_str(), false);if (0 == NTFS_Search_GetCount()){_tprintf(_T("扫描指定驱动器: %s\n"), strDriveList.c_str());tmBegin = ::clock();NTFS_Search_Reset_By_Drive_Letter(strDriveList.c_str(), strDbPath.c_str(), true);tmEnd = ::clock();_tprintf(_T("扫描耗时: %d毫秒\n"), tmEnd - tmBegin);}_tstring strKey;while (true){char szBuf[MAX_PATH] = { 0 };_tprintf(_T("文件数: %llu\n"), NTFS_Search_GetCount());_tprintf(_T("命令: \n"));_tprintf(_T(" :r 重新扫描, 如: :r\n"));_tprintf(_T(" :: 重新扫描指定驱动器, 如: ::CDEF\n"));_tprintf(_T(" :q 退出, 如: :q\n"));_tprintf(_T("查找关键字: "));strKey.clear();while (strKey.empty()){gets_s(szBuf, sizeof(szBuf));strKey = AStrToTStr(szBuf);}if (0 == _strnicmp(szBuf, "::", 2)){strDriveList = strKey.substr(2);_tprintf(_T("重新扫描指定驱动器: %s\n"), strDriveList.c_str());tmBegin = ::clock();NTFS_Search_Reset_By_Drive_Letter(strDriveList.c_str(), strDbPath.c_str(), true);tmEnd = ::clock();_tprintf(_T("总共耗时: %d毫秒\n"), tmEnd - tmBegin);continue;}if (0 == _stricmp(szBuf, ":r")){_tprintf(_T("重新扫描\n"));tmBegin = ::clock();NTFS_Search_Reset_By_Drive_Letter(strDriveList.c_str(), strDbPath.c_str(), true);tmEnd = ::clock();_tprintf(_T("总共耗时: %d毫秒\n"), tmEnd - tmBegin);continue;}if (0 == _stricmp(szBuf, ":q")){_tprintf(_T("退出\n"));break;}_tprintf(_T(R"(查询中...)"));_tprintf(_T("\n"));std::vector<_tstring> fileList;tmBegin = ::clock();int nRes = NTFS_Search_Query(strKey.c_str(), [](LPVOID lpData, LPCTSTR lpPath) -> bool {std::vector<_tstring>* pList = (std::vector<_tstring>*)lpData;pList->push_back(lpPath);return true;},&fileList);tmEnd = ::clock();int nIndex = 0;for (const auto& item : fileList){_tprintf(_T("%d: %s\r\n"), ++nIndex, item.c_str());if (nIndex >= 100){break;}}_tprintf(_T("\n"));_tprintf(_T("耗时: %g秒 查找结果: %d \n"), (double)((tmEnd - tmBegin)) / 1000.0f, (int)fileList.size());}NTFS_Search_Uninitialize();return 0;
};
动态库 & 静态库
https://gitee.com/flame_cyclone/ntfs_search
相关文章:
NTFS 文件搜索库
NTFS 文件搜索库 中文 | English 一个快速搜索NTFS卷文件的库 在这里插入图片描述 特性 快速扫描 NTFS 格式驱动器上的所有文件实时快速同步文件变更(创建, 更名, 删除)支持通配符查询文件名或文件路径重启自动更新文件变动, 无需重新进行全盘扫描 API描述 初始化并指定…...
【GoF23种设计模式】02_单例模式(Singleton Pattern)
文章目录 前言一、什么是单例模式?二、为什么要用单例模式?三、如何实现单例模式?总结 前言 提示:设计者模式有利于提高开发者的编程效率和代码质量: GoF(Gang of Four,四人帮)设计…...
UniApp:uni-segmented-control 自定义布局
自定义tabs选项,items 为tabs名称数组,横向滚动 <scroll-view scroll-x><view class"segmented-control"><view v-for"(item, index) in items" :key"index" class"control-item ":class"…...
【算法day17-day18】回溯:解决组合问题
不好意思呀各位,最近在忙期末考今天才彻底结束,来让我们继续算法之路吧~ 题目引用 组合电话号码的字母组合组合总和组合总和II分割回文串 1.组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回…...
从监控异常发现网络安全
前言 最近在前端异常监控系统中,发现一些异常信息,从中做了一些分析,得到一些体会,因此作文。 发现异常 某天早上打开监控系统发现,当天凌晨1点过测试环境有2个前端上报的异常,报错的原因都是由于没有获取…...
Qt之自定义标题栏拓展(十)
Qt开发 系列文章 - user-defined-titlebars(十) 目录 前言 一、方式一 1.效果演示 2.创建标题栏类 3.可视化UI设计 4.定义相关函数 5.使用标题栏类 二、方式二 1.效果演示 2.创建标题栏类 3.定义相关函数 1.初始化函数 2.功能函数 3.窗口关…...
Verilog中initial的用法
在 Verilog 语言中,initial 语句用于在仿真开始时执行一次性初始化操作。它是顺序执行的,用来描述在仿真启动时立即运行的代码块,通常用于赋初值、生成波形或控制信号行为。 语法 initial begin // 语句1 // 语句2 ... end特点 只…...
(14)D-FINE网络,爆锤yolo系列
yolo过时了?传统的yolo算法在小目标检测方面总是不行,最新算法DEIM爆锤yolo,已经替yolo解决。 一、创新点 这个算法名为DEIM,全称是DETR with Improved Matching for Fast Convergence,其主要创新点在于提出了一…...
Python :冬至快乐
第1部分:基础设置 首先创建一个新的 Python 文件,命名为 fireworks.py。 步骤 1.1: 导入必要的库 import pygame import random import sys from pygame.locals import * import math import time这些库的作用: pygame: 用于创建游戏和图…...
重拾设计模式--状态模式
文章目录 状态模式(State Pattern)概述状态模式UML图作用:状态模式的结构环境(Context)类:抽象状态(State)类:具体状态(Concrete State)类&#x…...
稀疏矩阵的存储与计算 gaxpy
1, gaxpy 数学公式 其中: , , 2, 具体实例 3,用稠密矩阵的方法 本节将用于验证第4节中的稀疏计算的结果 hello_gaxpy_dense.cpp #include <stdio.h> #include <stdlib.h>struct Matrix_SP {float* val; //…...
基于LabVIEW的USRP信道测量开发
随着无线通信技术的不断发展,基于软件无线电的设备(如USRP)在信道测量、无线通信测试等领域扮演着重要角色。通过LabVIEW与USRP的结合,开发者可以实现信号生成、接收及信道估计等功能。尽管LabVIEW提供了丰富的信号处理工具和图形…...
基于LSTM长短期记忆神经网络的多分类预测【MATLAB】
在深度学习中,长短期记忆网络(LSTM, Long Short-Term Memory)是一种强大的循环神经网络(RNN)变体,专门为解决序列数据中的长距离依赖问题而设计。LSTM因其强大的记忆能力,广泛应用于自然语言处理…...
物联网:全面概述、架构、应用、仿真工具、挑战和未来方向
中文论文标题:物联网:全面概述、架构、应用、仿真工具、挑战和未来方向 英文论文标题:Internet of Things: a comprehensive overview, architectures, applications, simulation tools, challenges and future directions 作者信息&#x…...
volatility2工具的使用vol2工具篇
vol2工具 命令格式:vol.py -f [image] --profile[profile] [plugin] 1、查看系统的操作版本,系统镜像信息 2.查看用户名密码信息,当前操作系统中的password hash,例如SAM文件内容 3.从注册表提取LSA密钥信息(已解密&…...
R 基础运算
R 基础运算 R 是一种广泛使用的统计编程语言,它提供了强大的数据操作和分析功能。基础运算在 R 中非常重要,因为它们是进行更复杂计算和数据分析的基础。本文将详细介绍 R 中的基础运算,包括算术运算、逻辑运算、向量化和矩阵运算。 一、算…...
javaScriptBOM
1.1、BOM概述 1.1.1、BOM简介 BOM(browser Object)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window。 BOM由一系列的对象构成,并且每个对象都提供了很多方法与属性 BOM缺乏标准…...
Godot RPG 游戏开发指南
Godot RPG 游戏开发指南 一、基础准备 1. 开发环境 下载并安装最新版 Godot 4.x选择使用 GDScript 或 C# 作为开发语言准备基础美术资源(角色、地图、道具等) 2. 项目结构 project/ ├── scenes/ # 场景文件 ├── scripts/ # 脚…...
目标检测数据集图片及标签同步旋转角度
前言 在深度学习领域,尤其是目标检测任务中,数据集的质量直接影响模型的性能。为了提升模型的鲁棒性和对各种场景的适应能力,数据增强技术被广泛应用于图像数据集处理。旋转角度是常见的数据增强方法,通过对图像及其对应的标签&am…...
2025前端面试热门题目——计算机网络篇
计算机网络篇——面试 1. 到底什么是 TCP 连接? TCP 连接的定义 TCP(传输控制协议)是一个面向连接的传输层协议。TCP 连接是通过 三次握手 确立的可靠数据通信链路,保证了在不可靠网络(如互联网)上的数据传输的准确…...
免费获取A股行情数据的终极解决方案:Python通达信接口实战指南
免费获取A股行情数据的终极解决方案:Python通达信接口实战指南 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在前100个字内,MOOTDX作为一款基于Python的通达信数据接口封…...
合宙ESP32C3 Flash模式进阶:从DIO到QIO的性能跃迁与实战避坑
1. ESP32C3 Flash模式基础:从DIO到QIO的本质差异 第一次接触ESP32C3的开发者可能会疑惑:为什么Flash访问模式会影响性能?这要从ESP32的XiP架构说起。XiP全称eXecute in Place,意味着代码直接从外部Flash执行,而不是像传…...
如何在没有计算机的情况下恢复Android上已删除的文件
意外从Android设备中删除重要文件可能会给您带来压力,但了解如何在没有计算机的情况下在Android上恢复已删除的文件可以节省您的时间和麻烦。幸运的是,有多种方法可以直接从手机恢复丢失的数据,无需计算机。从使用“最近删除”文件夹到利用 G…...
FPGA新手避坑指南:手把手教你写第一个仿真文件(tb.v),告别波形看不懂
FPGA仿真入门实战:从零编写Testbench到波形解析全攻略 引言 第一次接触FPGA仿真时,看着屏幕上跳动的波形图,那种茫然感我至今记忆犹新。明明代码看起来没问题,但仿真结果就是不对劲;或者更糟——根本不知道这些波形在表…...
BallonTranslator:3分钟搞定漫画翻译的终极AI工具,完全免费开源!
BallonTranslator:3分钟搞定漫画翻译的终极AI工具,完全免费开源! 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by…...
TikTok 短视频生成工具哪家好?2026 深度评测:专业运营到个人创作
在 2026 年,TikTok 已成为全球商业增长的核心战场,而短视频素材的产出效率则是决定成败的关键。面对琳琅满目的工具,TikTok 短视频生成工具哪家好成了创作者和卖家最关心的问题。为了帮你快速锁定最适合的利器,我们综合了官方背书…...
烽火HG680-LC刷机后体验:当贝纯净桌面+讯飞语音,老盒子秒变流畅电视盒的折腾记录
烽火HG680-LC刷机重生记:当贝桌面与讯飞语音的极致体验 去年双十一囤的旧电视盒在角落吃灰大半年后,终于迎来了它的高光时刻。这台搭载S905L3芯片的烽火HG680-LC,原厂系统卡顿得连打开设置都要等上十秒,广告弹窗更是让人崩溃。经过…...
VisualHMI Lua定时器深度解析:从核心机制到工业级倒计时实战
1. 项目概述与核心价值在工业HMI(人机界面)和串口屏的开发中,定时器是一个基础但至关重要的功能模块。无论是实现一个简单的延时开关、一个周期性的数据采集任务,还是一个复杂的倒计时控制逻辑,都离不开对定时器的精准…...
10亿+蛋白质、3000万核苷酸,全球最大生物向量库
摘要 同源搜索在计算生物学中具有核心作用,可用于识别生物序列间的进化关系与功能相似性。然而,包括BLAST、Foldseek和MMseqs2在内的现有同源搜索方法,难以高效、精准地处理超大规模生物数据库。本研究提出高效检索增强搜索工具ERAST,可在迄今规模最大的向量数据库中处理约…...
大麦网自动化购票系统:Python脚本实现高效票务获取完整指南
大麦网自动化购票系统:Python脚本实现高效票务获取完整指南 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 在当今热门演出票务市场,手动抢票的成功率…...
