views:

123

answers:

1

Hi,

We have a fairly large disk array with roughly 2-3 million XML files on it. The disk is formatted with NTFS and we would like to search the filesystem using wildcards. So something like * SomePartOfTheFilename * would be a typical search query.

We are using .Net and are finding that using DirectoryInfo appears to be slow.

DirectoryInfo directoryInfo = new DirectoryInfo(directory);

List<FileInfo> fileInfos = directoryInfo.GetFiles(searchString, SearchOption.AllDirectories).ToList();

Using Loops and recursion is also very slow.

Is there a lower level API call we can use to directly search the NTFS index?

Using dir * SomePartOfTheFilename * /s from the command line is almost instant. Is there something there that can be leveraged?

+1  A: 

I'm not sure if you can use the Indexing service, but it may be handy for what you are trying to do:

http://msdn.microsoft.com/en-us/library/ee805985%28VS.85%29.aspx

http://www.codeproject.com/KB/database/Indexing_Service_HOW-TO.aspx

It allows you to create complex queries against the NTFS index of the files on a computer.

Scott P
Hi ScottThanks for the idea, although I am not sure the indexing service will be appropriate here. I think the indexing service creates an index of the file contents as well as the filenames because of this I think we will end up with an enormous index. Our disk is around 500Gb.We are only interested in searching the filenames. I wonder if it is possible to configure the index service to only index the filenames?-Need to have a look...
Tim