2

我想通过 c# 搜索位于我系统中的媒体文件。意味着我想创建将扫描所有驱动器的搜索引擎(这里又是一个小问题,如何通过 c# 代码获取我们系统上的驱动器?)并搜索 .mp3、.mp4 等媒体文件。我如何通过 c# 桌面应用程序做到这一点?

4

4 回答 4

6

试试这个:

List<string> mediaExtensions = new List<string>{"mp3", "mp4"};
List<string> filesFound = new List<string>();

void DirSearch(string sDir) 
{
   foreach (string d in Directory.GetDirectories(sDir)) 
   {
    foreach (string f in Directory.GetFiles(d, "*.*")) 
    {
        if(mediaExtensions.Contains(Path.GetExtension(f).ToLower()))
           filesFound.Add(f);
    }
    DirSearch(d);
   }
}
于 2010-03-26T05:15:39.883 回答
3

我建议不要在目录中进行暴力迭代搜索,而是使用 Windows 桌面搜索 API,这将快几个数量级。

通过 C# 进行 Windows 桌面搜索

于 2010-03-26T05:56:03.787 回答
0

要获取您的驱动器列表:

string[] drives = Environment.GetLogicalDrives();

要获取所有文件:

foreach(string drive in drives)
    string[] allFiles = Directory.GetFiles(drive, "*.*", SearchOption.AllDirectories);

要使用递归获取所有文件:

List<string> allFiles = new List<string>();
private void RecursiveSearch(string dir)
{
    allFiles.Add(Directory.GetFiles(dir));
    foreach(string d in Directory.GetDirectories(dir))
    {
      RecursiveSearch(d);
    }  
}

使用 Manu 的答案过滤

于 2010-03-26T07:30:11.007 回答
0

试试这个

 var files = new List<string>();
     //@Stan R. suggested an improvement to handle floppy drives...
     //foreach (DriveInfo d in DriveInfo.GetDrives())
     foreach (DriveInfo d in DriveInfo.GetDrives().Where(x => x.IsReady == true))
     {
        files.AddRange(Directory.GetFiles(d.RootDirectory.FullName, "File Name", SearchOption.AllDirectories));
     }
于 2015-12-05T06:43:15.110 回答