从零开始:用C#开发的海量文件内容秒搜神器TDSContent——免费开源高效办公必备!

news/2025/10/14 17:32:52/文章来源:https://www.cnblogs.com/luojin765/p/19141631

从零开始:用C#开发的海量文件内容秒搜神器TDSContent——免费开源高效办公必备!

从零开始:用C#开发的海量文件内容秒搜神器TDSContent——免费开源高效办公必备!

还在为全文搜索烦恼吗?是否被收费软件的糟糕体验困扰?是否担心闭源程序带来的安全隐患?是否在标准版和增强版之间纠结不已?
别担心,新时代的开源文件内容搜索神器 TDSContent 来了!它是文件名搜索神器 TDS 的姊妹版,完全免费、MIT开源、安全,绿色无需安装、无需联网,直接本地运行即可

一、项目介绍

TDSContent (TDS姊妹版),是一个MIT开源的,超级简单易用的本地全文搜索工具,几乎可以在毫秒内,搜索出存储在目标文件夹里所有文件的文字内容,快速为您定位重要信息。软件使用简单,完全免费开源安全,绿色无需安装、联网,直接本地运行即可。
TDS文本的搜索实现基于了开源的Lucene.Net(Apache License, Version 2.0)引擎,没错,就是Elasticsearch用到的那个Lucene。基于该引擎,我们默认实现了对纯文本类文件(txt,json,md,ini,log)、Word文档(docx)、PPT文档(pptx)、PDF文档(pdf)等格式的全文索引,后续还将逐渐实现更多文件格式的支持。用户也可自行开发通过接口实现自定义的解析器。

以下是一段录屏展示了基本的使用方法,以及对路径、内容更新的响应。

TDSContent_Intro

二、使用上手

TDSContent有着简洁易用的界面,克制且优雅,没有任何复杂的面板。

2.1 首先需要以管理员权限启动,初始化完成后,在下方空白处点击右键,选择"Add folder to index..." 添加文件夹后即可。

首次启动会占用一些索引时间,正常使用时,下次启动初始化时间会大大缩短。

add folder to index

2.2 选择添加的文件夹路径

程序默认会包含当前路径内部所有子文件夹的所有文件。扩展名默认提供了.txt .docx .pptx .pdf,如果是纯文本类的文件比如 .md .json .log 可以自行在下方 “Add extension of pain text files" 输入扩展名,以'|'符号分隔

PathAndFileSelected

2.3 文件夹路径已经添加完成

点击确定后,程序会在后台更新文件内容。仅首次进行所有内容的扫码并压缩为索引存储在根目录。如果有文件无法读取,可在程序目录的log日志中查看原因。

Indexing

搜索结果展示:

Results2

2.4 文件路径的更新

您可以添加多个文件夹作为索引目标。当文件夹内容发送变更、路径发生变更、文件名发生变更时,一正常情况下,程序都会在下次搜索时以增量的方式异步自行处理并修正,无需您手动操作。
程序不会实时的监控系统文件变化,因此无需担心平时您正常使用时会有性能影响。

三、疑问

3.1 文件数量很多怎么办?性能会不会变慢?

  • 文件数量主要影响在于初次检索的速度很慢,在索引完成后进行搜索时,响应基本都是百万量级-毫秒/秒级别响应。

3.2 为什么有的文件内容会搜索不到?

  • 当前默认的搜索模式为PhraseQuery,需要输入完整的词以适配分词后的索引信息。后续将开放更多比如模糊、正则等搜索匹配模式的UI选项(可用选项包含Pharse,TermQuery,WildcardQuery,FuzzyQuery,TermRangeQuery)。
  • 首先检查文件的权限是否能被程序读取。
  • 因为Office软件会产生大量类似命名的临时文件,以~和以{符号开头的文件将被自动忽略,需要检查您的文件是否包含以这些符号开头的命名。
  • 索引更新不及时。在特殊情况下,索引的自动更新机制可能会发生异常。这是因为程序是通过读取USN日志实现更新监控的。如果中间操作过大文件处理较多,或者USN日志记录中断都可能造成更新不及时,因此可能需要进行手动的点击"Reindex selected folders"以重建索引,耗时又索引文件夹内文件数量及大小决定。

3.3 为什么有的文件搜出来了但打开提示路径错误?

  • USN更新失效,需要手动的点击“Refresh USN"重建,耗时大概20秒

3.4 还能支持更多格式吗?比如xlsx,doc等

  • 文件格式转换由IFileToStringConverter接口实现,理论上可以任意扩展。但考虑实用性以及开源协议的传播性(本项目为MIT)等问题,暂时未做多选,后续会逐渐增加。
  • 例如dwg、dxf的等格式解析适配已经开发完成,后续将集成到默认实现中。
  • 理论上可以任意扩展类型,只要能转化成文本。

3.5 资源占用情况大不大?

  • 没有后台常开线程常实时监控或定时刷新系统文件变化,不会无谓的扫描全盘,只会在用户操作时自动根据USN记录按需触发更新。
  • USN信息存储在内存中,由磁盘的文件数量级文件名长度共同决定,大概是每1万条目占用400kB左右。
  • 索引信息为磁盘存储,当索引创建完成,再次启动时内存占用将大幅度降低。索引占用情况与Lucene引擎的压缩存储有关,测试的压缩比例大概为100:1甚至更小。

3.6 是否收费?

  • MIT开源,好用的话请给个星星。
  • 没有基础版、增强版,所有格式解析器后续更新的都会免费提供。

四、最后

希望TDSContent可以助您实现高效优雅的文件内容检索。后续微信公众号萤火初芒将会和大家分享如在C#中从零开始完成TDSContent这个项目过程中的思考、框架以及技术关键点。项目现阶段以基础功能实现为主,仅对关键代码进行了斟酌,仍在持续更新和修复小问题,难免还有bug,我们将持续优化更新。

欢迎大家点赞关注收藏。本项目已在Github仓库完全开源了!点个 Star ⭐️支持一下!代码仓库地址 https://github.com/LdotJdot/TDSContent,其他项目可关注微信公众号,发送消息 “TDS”,"Json"即可查看!
希望这篇文章对你有所帮助,也欢迎大家在学习过程中提出问题和建议,欢迎随时交流!
如果github上不了,朋友们可以去百度网盘下载:https://pan.baidu.com/s/1vT_ex1nSXuxnnMYIfJNs9g?pwd=2mvo (version c1.0.3)

项目中部分组件使用Apache License, Version 2.0协议,特此声明:

  1. Lucene.Net.Analysis.SmartCn: https://lucenenet.apache.org
  2. PDFiumCore: https://github.com/Dtronix/PDFiumCore

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/936964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos 7.9 安装单机版k8s

我这里提前安装好了 docker ,直接着手安装k8s[root@zjk ~]# docker -v Docker version 26.1.4, build 5650f9b1、关闭防火墙、selinux(减少不必要的麻烦)、交换区(防止k8s对pod内存监控幻觉)systemctl stop firew…

隐藏继承成员什么时候用到

“只有在‘故意不让父类成员参与多态’,但又不想改父类签名时,才用 new 隐藏继承成员。”一、先分清 表格 复制关键字目的运行时效果override 扩展/替换父类实现 动态绑定——真实类型决定方法new 彻底隐藏父类成员 …

2025 旋转蒸发仪选型指南:适配科研与生产需求的优质厂家 TOP5 推荐

2025 旋转蒸发仪选型指南:适配科研与生产需求的优质厂家 TOP5 推荐在精细化工提纯、生物医药溶剂回收、高校科研样品预处理等场景中,旋转蒸发仪的控温精度、真空适配性及运行稳定性,直接决定实验效率与产物纯度。面…

今天被公司告知不续签合同了,我被优化了 哈哈哈

沒什么别的事儿,今天被公司告知不续签合同了,我被优化了 哈哈哈, 记录一下

移动终端安全:实验2-创建自签名证书对APP签名 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年混合机厂家最新推荐排行榜:强力混合机 / 倾斜式混合机 / 耐火材料混合机 / 锂电池材料混合机 / 球团强力混合机优质厂家推荐

当前锂电池、耐火材料、陶瓷、化工等行业飞速发展,对混合机的需求愈发多元,不仅要求设备混合均匀度高,还需适配不同物料特性与生产场景。但行业内混合机品牌繁杂,产品质量参差不齐,部分设备存在混合死角、能耗高、…

Oracle OCM 认证的定位与价值

对于刚接触数据库的“小白”来说,Oracle OCM认证是个非常陌生的词,”最高级认证“、”认证大师“听起来像一座遥不可及的高山。别担心,OCM虽然难,但”难啃的骨头才香“。 OCM认证,全称为Oracle Certified Master(…

2025 优质防爆接线盒/防爆穿线盒/防爆接电箱厂家推荐榜:安全与专业兼具的行业之选

在石油、化工、矿山等易燃易爆环境中,防爆接线盒作为电气系统的 "安全卫士",其质量与性能直接关系到生产安全。基于产品合规性、市场应用反馈及综合服务能力,本文梳理出五家值得关注的防爆接线盒制造商,…

Microsoft Purview实现数据泄露概率降低30%的技术解析

根据Forrester研究报告,微软Purview统一数据安全平台通过精细化数据防丢失策略、自动化合规审计和集中式信息治理,帮助企业实现数据泄露概率降低30%,调查时间减少75%,并节省近50万美元的遗留成本。Microsoft Purvi…

Day13-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\exception

异常EXCEPTION 检查性异常 用户错误或问题引起的异常 运行时异常 运行时异常可以被程序员发现 错误ERROR 错误不是异常,而是脱离程序员控制的问题,比如栈溢出 异常处理框架 java可以吧异常当作对象来处理,并定义一个…

2025 值得关注的除锈剂厂家企业推荐榜单,覆盖多场景需求

在工业维护、汽车养护、设备保养等多个领域,除锈剂作为基础防护产品发挥着关键作用。市面上的除锈剂企业各具特色,有的深耕技术研发,有的侧重场景适配,有的凭借口碑站稳市场。以下结合企业技术实力、产品适配性及行…

Day3整形输入

#include<stdio.h>int main(){int a;//通过键盘输入赋值//&运算符,表示取地址运算符scanf("%d",&a);printf("%d\n",a);return 0; }

2025优质电缆/防火/模压/瓦楞/大跨距/热镀锌/热浸锌/不锈钢/光伏/铝合金/锌铝镁桥架厂家推荐:五家实力企业的技术与服务特色解析

在工业电力传输与布线系统中,电缆桥架作为关键基础设施,其品质直接影响工程安全性与运维效率。经过市场调研与行业口碑梳理,以下五家桥架厂家凭借各自技术优势与服务能力脱颖而出,涵盖不同规模与特色定位,为各类工…

2025 领域优质石油/电厂/钢铁厂/化工/消防/船舶/住宅/管道/隧道/地铁电伴热带厂家推荐榜单,工业与民用场景全覆盖

在工业保温、建筑采暖、管道防冻等领域,电伴热带作为核心加热设备,其产品性能与服务质量直接影响项目安全与效率。经过对行业技术实力、项目应用案例及市场口碑的综合梳理,以下为大家推荐五家各有优势的电伴热带厂家…

高效驱动 IC 设计的关键 - RTL 合成

在现代数字设计中,RTL 合成(Register-Transfer Level Synthesis)是将抽象描述转化为具体实现的关键一环。它将使用 Verilog 或 VHDL 编写的行为级(behavioral)逻辑,转换为基于门电路的结构表示(gate-level netl…

springboot实现支付宝支付

​ maven引入<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.7.4.AL</version></dependency>配置 ​package c…

Pendle Finance 详解:DeFi 中的“收益拆分器”——新手指南

Pendle Finance 详解:DeFi 中的“收益拆分器”——新手指南 引言:Pendle 是什么,为什么它在 DeFi 中这么火? 想象一下,你在银行存钱,能赚取利息。但在传统金融中,你不能单独卖掉“利息部分”来赚更多钱,或者买…

springboot实现微信支付

maven引入<dependency> <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-java</artifactId> <version>…

Hyperliquid 主链的技术栈详解

Hyperliquid 主链的技术栈详解 Hyperliquid 是一个去中心化永续合约交易所,其主网链是一个独立的 Layer 1 (L1) 区块链,从底层设计上进行了优化,以支持高性能交易和 DeFi 应用。该链不是基于 Ethereum 或其他现有 L…

10080 端口打不开页面

ERR_UNSAFE_PORT 是浏览器安全机制导致的。这个问题很常见! 🔍 浏览器禁用端口列表 浏览器出于安全考虑,会阻止访问一些"不安全"的端口,10080正在这个列表中。 常见的被禁用端口: 1, 7, 9, 11, 13, 15…