我有FAT32和NTFS分区的硬盘(比如1TB),我没有关于哪些文件存储在其上的信息,但是在需要时我想快速访问超过500 MB的大文件。我不想扫描我的整个硬盘,因为它非常耗时。 我需要快速的结果。我想知道是否有任何我可以直接调用的NTFS / FAT32 API - 我的意思是如果他们有关于存储的文件的一些元数据那么它会更快。我想用C ++和C#编写我的程序。
修改 如果扫描硬盘是唯一的选择,那么我可以做些什么来确保最佳性能。喜欢 - 我可以跳过扫描系统文件夹,因为我只对用户数据感兴趣。
答案 0 :(得分:3)
如果您愿意以Vista及更高版本为目标,则可以使用搜索索引器API。
如果查看here,您可以找到有关搜索索引器的信息。搜索索引器会对文件大小进行索引,以便它可以执行您想要的操作。
答案 1 :(得分:2)
不可能。这两个文件系统都不会保存您可以直接查询的大文件列表。你必须以递归的方式查看每个文件夹并检查每个文件的大小,以找到你认为很重要的文件。
答案 2 :(得分:2)
你唯一的祈祷是锁定文件索引器,否则你将不得不遍历所有文件。根据您的计算机,您可能可以锁定本机Microsoft索引器(searchindexer.exe),或者如果您有Google桌面搜索,则可以锁定它。
答案 3 :(得分:2)
如果你愿意自己做一些很多的额外工作来加快速度,你可能会有所成就。很多事情将取决于你的需求。
让我们从FAT32开始吧。 FAT(通常不仅仅是32位变体)以文件分配表命名。这是一个面向分区开头的数据块,它告诉分区中的哪些集群属于哪些文件。 FAT基本上被组织为群集的链接列表。如果您只想查找大文件的数据区,可以将FAT作为多个原始扇区读取,并扫描该数据以查找超过X个簇的链接列表(其中X定义了您认为大文件的下限。然后,您可以访问这些群集并查看与每个文件关联的实际数据。奇怪的是,不会知道的是该文件的名称。文件名包含在目录中,基本上与文件类似,只是它们包含的是指定格式的固定大小的记录。您必须从根目录开始,并通读目录树以查找文件名。
NTFS既简单又复杂。 NTFS有一个主文件表(MFT),用于包含分区中所有文件的记录。好的一点是,您可以阅读MFT并获取有关磁盘上每个文件的信息,而无需通过目录树来获取它。不好的一点是,解码NTFS分区的内容绝对不是一件容易的事。读取数据(有意义)非常困难 - 而且写入数据更多很困难。此外,最新版本的Windows对磁盘分区的原始读取添加了更多限制,因此根据您所使用的分区,您可能无法访问所需的数据。
然而,这些都不是最低限度支持的任何东西。为此,您打开一个名为“\。\ D:”的文件(其中D =您关心的磁盘的字母)。然后,您可以从该磁盘驱动器中读取原始扇区(假设打开它可以工作)。这将让您从引导扇区开始查看整个磁盘(或分区,视情况而定)的原始数据,并查看其中的所有其他内容(FAT,根目录,子目录等 - 全部作为扇区原始数据)。系统将允许您读取原始数据,但所有能够理解该数据的工作都是您的责任。如果您询问的速度是绝对必要的,这可能是一种可能性 - 但FAT卷需要相当多的工作,而且远远超过NTFS。除非你真的需要额外的速度,就像你说的那样,这可能不值得考虑尝试这样做。