使用 C# 查找磁盘上所有 exe 文件的最有效方法?

2024-02-15

使用 C# 查找磁盘上所有 exe 文件的最有效方法是什么?

它将在程序的后台线程中完成,因此磁盘使用量应尽可能小。


您提供的链接是 C# 中最有效的方法(使用 .Net 4.0):Directory.EnumerateFiles 方法 http://msdn.microsoft.com/en-us/library/dd383458

.Net 的早期版本必须使用较慢的方法,这会导致大型驱动器出现内存问题,@hatchet 展示了一个很好的例子:是否有更快的方法在 .NET 中递归地扫描目录? https://stackoverflow.com/questions/724148/is-there-a-faster-way-to-scan-through-a-directory-recursively-in-net

我不建议使用 TPL,正如 Jon Skeet 在这里提到的那样:用于目录遍历的任务并行库 https://stackoverflow.com/questions/4149873/task-parallel-library-for-directory-traversal#comment14095131_4149873

如果你看到这里的第一条评论MSDN 链接:使用并行类迭代文件目录 http://msdn.microsoft.com/en-us/library/ff477033.aspx我什至认为微软在这种 TPL 方法上也没有取得成功。

我的另一个建议是使用 LogParser,您可以将它与 C# 一起使用!它是一个免费的微软产品,但我不确定重新分配权限,我上次使用它时必须将它单独包含在我的包中。它满是苍蝇,比疾驰的火车还要快!

根据 @spender 评论,我发现了一个日志解析器示例 http://forums.iis.net/t/1183252.aspx找到 180 天及以上的文件,您可以尝试一下,如果有用的话进行调整:

SELECT
    ContentPath, [Days (Old)], FileName, [Creation Date Time]
    USING creationtime AS [Creation Date Time],
    TO_DATE([Creation Date Time]) AS Cdate,
    SUB(TO_LOCALTIME(SYSTEM_TIMESTAMP()), Cdate) AS Days,
    DIV(TO_INT(Days),86400) As [Days (Old)],
    EXTRACT_PATH(TO_LOWERCASE(path)) AS ContentPath,
    TO_LOWERCASE(name) AS FileName
FROM %source% 
WHERE
  (attributes NOT LIKE 'D%')
AND
  ([Days (Old)] >= TO_INT('%day%'))
ORDER BY [Creation Date Time] DESC

%source% 可能类似于 c:\*.exe,如参数 c:\temp\*.* 中所示。将以上内容保存为 cc.sql,使用以下语法运行它:

 C:\Temp\Tools\Logparser>LogParser.exe file:cc.sql?source="c:\temp\*.*"+day="180"  -i:FS -preserveLastAccTime -rtp:-1

EDIT

谢谢小伙伴们的点赞!我做的事件分析器 http://EventAnalyser.AppointmentsBook.com应用程序于 2005 年(在 .net 2.0 发布之前),由于 Log Parser 建议非常受欢迎,我想我应该分享一下在 .Net 中使用 LogParser 的方式

好人在http://visuallogparser.codeplex.com/ http://visuallogparser.codeplex.com/有 为我们提供了源代码。

打开可视化日志解析器 http://visuallogparser.codeplex.com/VS2010 中的解决方案,忽略有关调试的提示,解决方案加载后,F5,将组合框设置为 FS(文件系统),粘贴此查询并按 go。

SELECT
    ContentPath, [Days (Old)], FileName, [Creation Date Time]
    USING creationtime AS [Creation Date Time],
    TO_DATE([Creation Date Time]) AS Cdate,
    SUB(TO_LOCALTIME(SYSTEM_TIMESTAMP()), Cdate) AS Days,
    DIV(TO_INT(Days),86400) As [Days (Old)],
    EXTRACT_PATH(TO_LOWERCASE(path)) AS ContentPath,
    TO_LOWERCASE(name) AS FileName
FROM 'c:\*.exe' 
WHERE
  (attributes NOT LIKE 'D%')
AND
  ([Days (Old)] >= TO_INT('180'))
ORDER BY [Creation Date Time] DESC

同时,您可能希望运行任何其他 .Net 应用程序来搜索目录并比较结果!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 C# 查找磁盘上所有 exe 文件的最有效方法? 的相关文章

随机推荐

  • 如何在 Tomcat 7 上实现 Socket.io

    我们现有的应用程序托管在 tomcat 6 上 我们正在迁移到提供 websockets 支持的 tomcat 7 我想在我们的应用程序中尝试 socket io 以获得一些基于 websockets 的功能 因为它具有非常好的跨浏览器支持
  • 我的应用与 Google Play 商店中的 Nexus 7 不兼容

    Hii i have submitted an app to playstore but it isn t compatible with Nexus here is my Manifest My App is on List of sup
  • LibreOffice 4.1 Writer:调整表格中列宽的宏

    我正在研究一些适用于表格的 LibreOffice 宏 特别是将每列和行的宽度和高度设置为 0 85 厘米 0 335 英寸 在 MS Office 中 这很简单 只需选择表格并在宏中包含 Selection Rows Height Cen
  • 使用最新版本 Lucene 的示例

    我是 Lucene 的新手 想直接从 Maven 环境中的 Java 代码调用它 我已经尝试了一段时间来寻找可以下载和运行的工作示例 官网最新的教程是2013 Lucene 3 https cwiki apache org confluen
  • 表示可以有子菜单的菜单的数据结构

    例如我可以有这样的东西 A B ba bb C Ca D 现在我有一个 2D 数组 但这不是很通用 因为如果我想将最大子级别从 2 扩展到 3 我需要另一个维度 有什么建议吗 复合模式在这里是一个合适的应用 来自维基百科 http en w
  • 取消设置 $_SESSION 不起作用

    嗨 我编写了一个与 facebook 连接并注册用户的代码 然后它使用户登录 一切都很好 当他们登录时 我设置 SESSION id 我的猜测是 如果未设置此设置 用户将从我的网站注销 并且不会 自动重新连接 因为以前它就像一个循环 每次我
  • 将 get() 与替换函数一起使用

    谁能向我解释为什么会出现以下示例 Create simple dataframe assign df data frame P runif 5 Q runif 5 R runif 5 Return the dataframe from th
  • 无法加载文件或程序集“System.Web.Helpers,IIS 8 上出现错误”

    我有一个 MVC4 Web 应用程序 可以使用本地 IIS Express 服务器在 Visual Studio 2012 上正常运行 当我将应用程序发布到在 Windows 2012 上运行的 IIS 8 Web 服务器时 初始登录页面会
  • 如何从 Microsoft Access 的附件字段查询附件数量?

    我的一位用户有一个 Microsoft Access 数据库 并且在表中他有一个附件字段 在他的一个查询中 他想要返回该字段包含的附件 数量 我试图让它发挥作用 但没有成功 我尝试创建一个 VBA 模块并将字段传递给它 但它对我来说出错了
  • 如何将 cmd python 从 anaconda 更改为默认 python?

    windows powershell 或 cmd 使用 anaconda python 而不是默认的 windows 安装如何让他们使用默认的Python安装 我的操作系统是Windows 8 1蟒蛇3 6蟒蛇蟒蛇3 6 在系统属性中设置默
  • 如何在.net core中进行String.Copy?

    在将 net Framework 应用程序移植到 net core 应用程序时 有一些用途String Copy https msdn microsoft com en us library system string copy v vs
  • 为什么蒙特卡罗树搜索会重置树

    我有一个小但可能很愚蠢的问题蒙特卡罗树搜索 https en wikipedia org wiki Monte Carlo tree search 我理解其中的大部分内容 但一直在研究一些实现 并注意到在给定状态运行 MCTS 并返回最佳移
  • 如何让 SwiftUI 视图在拖动时显示在其他视图前面?

    我正在用新的 更完整的代码更新这个问题 以展示我如何尝试实现下面来自 HunterLion 的答案中的建议 这是问题的原始陈述 我正在使用 SwiftUI 实现 Pentominos 的一个版本 当我将一个片段 视图 拖到板上时 我希望它在
  • 在 Angular 中处理 Accordion 的打开/折叠事件

    如果我有这个代码
  • 通过架构更改从暂存 > 生产中无缝 EF 迁移

    我有一个简单的网络应用程序 它由带有暂存槽和生产槽的 Azure Web 应用程序组成 当不需要考虑数据库迁移时 我可以通过以下方式轻松实现无缝更新 将应用程序部署到暂存区 交换暂存 生产槽位 当我要处理数据库迁移时 这会变得更加棘手 现在
  • 使用 PHP 进行 CURL - 非常慢

    All 我必须请求一个返回 JSON 请求的 URL 我正在使用 PHP 和 CURL 来执行此操作 目前 请求和响应大约需要 3 4 秒 以下是curl代码 ch curl init devnull fopen tmp curlcooki
  • 以Python方式创建列表的列表

    我正在使用列表列表来存储 python 中的矩阵 我尝试按如下方式初始化 2x3 零矩阵 mat 0 2 3 但是 当我更改矩阵中一项的值时 它会更改该条目的值every行 因为每行的 idmat是一样的 例如 分配后 mat 0 0 1
  • 使用spring security时如何在velocity宏中获取csrf令牌

    我正在尝试为启用了 Spring Web Security 的应用程序创建自定义登录屏幕 但我无法弄清楚如何将 csrf 令牌传递给velocity 不 我目前无法使用 JSP 该模型看起来像这样 RequestMapping value
  • Fabric.JS 与 Node.JS - 导出为 PNG/JPEG

    所以我只是在玩 Fabric JS适用于 Node JS 不适用于 Web 我已经成功制作了一个静态画布 并在上面放置了一个矩形 出口的时间到了 这是我创建画布并添加矩形的代码 var canvas new fabric StaticCan
  • 使用 C# 查找磁盘上所有 exe 文件的最有效方法?

    使用 C 查找磁盘上所有 exe 文件的最有效方法是什么 它将在程序的后台线程中完成 因此磁盘使用量应尽可能小 您提供的链接是 C 中最有效的方法 使用 Net 4 0 Directory EnumerateFiles 方法 http ms