有没有办法在Windows中获取目录中的文件数量(非recursion是足够好的)没有通过FindFirst/NextFile枚举它们的潜在的重大开销?
目的是估计需要处理多less个文件。
由于数据不是必不可less的,并且文件夹几乎总是在本地驱动器上,所以可以接受NTFS特定的命令(假设不需要提升)。
有任何想法吗?
如何以及何时使用/ dev / shm来提高效率?
(为什么)是FSCTL_SET_OBJECT_ID危险?
将statvfs转换为正确的百分比
Windows:使用File.listRoots显示映射的networking驱动器
cd / bash在符号链接上的行为
在本地NTFS驱动器上查找回收站
为什么inode号从1开始而不是0?
跟踪目录中文件的数量是一个开销,不能为文件系统提供任何好处,所以他们都没有。
计数本地驱动器上的文件对于大多数用途来说应该足够快。 处理这些文件的时间肯定会占用一小部分时间。
假设索引服务正在运行并且目录被索引,我们可以查询目录并计算给定目录上的文件。
我不知道查询目录是否更快,唯一的想法是在我脑海中。
问候。
VB.NET中的示例代码
Sub Main() Try ' Catalog Name Dim strCatalog As String = "System" Dim strQuery As String strQuery = "Select DocPageCount,DocTitle,Filename,Size,PATH,URL from ScopE('shallow traversal of ""C:Windows""')" Dim connString As String = "Provider=MSIDXS.1;Integrated Security .='';Data Source='" & strCatalog & "'" Dim cn As New System.Data.OleDb.OleDbConnection(connString) cn.open() Dim cmd As New System.Data.OleDb.OleDbCommand(strQuery,cn) Dim rdr As System.Data.OleDb.OleDbDataReader = cmd.ExecuteReader() Dim files As Integer = 0 While rdr.Read() files += 1 Console.WriteLine("Path: {0} Filename: {1} Size : {2}",rdr("PATH"),rdr("Filename"),rdr("Size")) End While rdr.Close() rdr = nothing cmd.dispose() cmd = nothing cn.Close() Console.WriteLine("Total Files: {0}",files) Catch ex As Exception Console.WriteLine(ex) End Try End Sub
更多信息: 使用Microsoft索引服务和ASP.NET搜索您的网站
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。