我可以一次读取整个NTFS目录树到RAM中吗?

由于这quesiton没有得到任何有用的答案和一些意见,请参阅我的另一个问题,得到的地方: 如何确切地说,“一切search”可以立即在我的4TB硬盘上search2bln文件列表不到10秒?

我只知道读取目录的方法是recursion地下降到每个目录中,但是如果我想要快速地在整个磁盘上的任何地方find文件,那就太慢了。

有一个窗口程序“Everything Search” http://www.voidtools.com/比我想象的更快,可以通过recursion下降(在不到10秒的时间内读取4TB硬盘上的几乎2bln文件的文件名)。

我知道我可以提前build立索引,但是可以通过在一个操作中将整个磁盘的目录树读入ram并在那里parsing来完成。

编辑

由于我的问题被certificate是令人困惑的,所以我想这样做:

https://msdn.microsoft.com/en-us/library/07wt70x2(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1

// For Directory::GetFiles and Directory::GetDirectories // For File::Exists, Directory::Exists using namespace System; using namespace System::IO; using namespace System::Collections; // Insert logic for processing found files here. void ProcessFile( String^ path ) { Console::WriteLine( "Processed file '{0}'.", path ); } // Process all files in the directory passed in, recurse on any directories // that are found, and process the files they contain. void ProcessDirectory( String^ targetDirectory ) { // Process the list of files found in the directory. array<String^>^fileEntries = Directory::GetFiles( targetDirectory ); IEnumerator^ files = fileEntries->GetEnumerator(); while ( files->MoveNext() ) { String^ fileName = safe_cast<String^>(files->Current); ProcessFile( fileName ); } // Recurse into subdirectories of this directory. array<String^>^subdirectoryEntries = Directory::GetDirectories( targetDirectory ); IEnumerator^ dirs = subdirectoryEntries->GetEnumerator(); while ( dirs->MoveNext() ) { String^ subdirectory = safe_cast<String^>(dirs->Current); ProcessDirectory( subdirectory ); } } int main( int argc, char *argv[] ) { for ( int i = 1; i < argc; i++ ) { String^ path = gcnew String(argv[ i ]); if ( File::Exists( path ) ) { // This path is a file ProcessFile( path ); } else if ( Directory::Exists( path ) ) { // This path is a directory ProcessDirectory( path ); } else { Console::WriteLine( "{0} is not a valid file or directory.", path ); } } } 

我想获得相同的信息,但不需要多次调用Directory::GetDirectories 。 我正在寻找的解决scheme看起来不像这个代码。 这个代码只是我想要读取磁盘(目录中所有文件的名称)的信息的示意图,而不是我想要做什么(我不想recursion以及有多less个系统调用与目录一样)。

编辑2 (对于认为这个问题太广泛的人):

我正在问如何在Windows或Linux操作系统上这样做。 我会接受任何语言的答案,因为我最感兴趣的是我需要做什么系统调用(以及如何parsing这些调用的结果),以便将整个驱动器的NTFS目录树以less于一个的系统调用驱动器上的每个目录。

我也会接受这个答案,指向Windows或者Linux库。

如果你有足够数量的内存然后继续做。 但我建议你加载部分磁盘而不是整个磁盘,这也会提高你的时间效率。