0
我不是在尋找特定的文件,而是在特定的目錄中索引這些目錄中的所有文件。我知道如何搜索文件類型和名稱,但不知道如何使用索引來進行索引。如何掃描特定目錄的多個驅動器?
我不是在尋找特定的文件,而是在特定的目錄中索引這些目錄中的所有文件。我知道如何搜索文件類型和名稱,但不知道如何使用索引來進行索引。如何掃描特定目錄的多個驅動器?
嘗試這樣:(從MS代碼示例拍攝)
public class StackBasedIteration
{
static void Main(string[] args)
{
// Specify the starting folder on the command line, or in
// Visual Studio in the Project > Properties > Debug pane.
TraverseTree(args[0]);
Console.WriteLine("Press any key");
Console.ReadKey();
}
public static void TraverseTree(string root)
{
// Data structure to hold names of subfolders to be
// examined for files.
Stack<string> dirs = new Stack<string>(20);
if (!System.IO.Directory.Exists(root))
{
throw new ArgumentException();
}
dirs.Push(root);
while (dirs.Count > 0)
{
string currentDir = dirs.Pop();
string[] subDirs;
try
{
subDirs = System.IO.Directory.GetDirectories(currentDir);
}
// An UnauthorizedAccessException exception will be thrown if we do not have
// discovery permission on a folder or file. It may or may not be acceptable
// to ignore the exception and continue enumerating the remaining files and
// folders. It is also possible (but unlikely) that a DirectoryNotFound exception
// will be raised. This will happen if currentDir has been deleted by
// another application or thread after our call to Directory.Exists. The
// choice of which exceptions to catch depends entirely on the specific task
// you are intending to perform and also on how much you know with certainty
// about the systems on which this code will run.
catch (UnauthorizedAccessException e)
{
Console.WriteLine(e.Message);
continue;
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
continue;
}
string[] files = null;
try
{
files = System.IO.Directory.GetFiles(currentDir);
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine(e.Message);
continue;
}
catch (System.IO.DirectoryNotFoundException e)
{
Console.WriteLine(e.Message);
continue;
}
// Perform the required action on each file here.
// Modify this block to perform your required task.
foreach (string file in files)
{
try
{
// Perform whatever action is required in your scenario.
System.IO.FileInfo fi = new System.IO.FileInfo(file);
Console.WriteLine("{0}: {1}, {2}", fi.Name, fi.Length, fi.CreationTime);
}
catch (System.IO.FileNotFoundException e)
{
// If file was deleted by a separate application
// or thread since the call to TraverseTree()
// then just continue.
Console.WriteLine(e.Message);
continue;
}
}
// Push the subdirectories onto the stack for traversal.
// This could also be done before handing the files.
foreach (string str in subDirs)
dirs.Push(str);
}
}
}
我只想修改只獲取文件一旦你在該目錄要尋找在
。通過添加System.IO.DriveInfo.GetDrives();
並存儲結果列表,然後將這些字符串傳遞給答案,我能夠獲得每個邏輯驅動器的路徑以開始搜索。Charles
您是否嘗試過使用[Directory.GetDirectories](https:// msdn .microsoft.com/EN-US/librar y/ms143314(v = vs.110).aspx?) – juharr
「對於索引」意味着您試圖構建自己的索引,還是尋找一種方法來查詢由「Windows Search」構建的現有索引?請注意,後者默認不包括整個驅動器。 –
我有,但是我不知道基本目錄將開始搜索。例如,我正在尋找一個名爲myStuff的文件夾,該文件夾可能在驅動器C:,D:,E :,或F:中。 – MikeBravo