使用c#列出驱动器中文件夹和子文件夹中的所有文件

时间:2013-12-09 02:30:47

标签: c#

我想列出驱动器中的所有文件,我也在c#中尝试此代码。但我得到unaurthorizedfileaccess异常。 plzz给了我正确的解决方案,所以我可以继续我的工作......

try
{
    var files = new List<string>(Directory.GetFiles("E:\", "*.*", SearchOption.AllDirectories));
    Method(files);           
}
catch(Exception e)
{
    Console.WriteLine(e);
}
static void Method(List<string> files)
{
    foreach (string file in files)
    {
        Console.WriteLine(file);
    }
    Console.WriteLine(files.Count);
}

2 个答案:

答案 0 :(得分:2)

您可以使用方法在目录中获取文件,并以下面的方式递归调用该文件

static void GetAllFiles(string path, IList<string> files)
{
    try
    {
        Directory.GetFiles(path).ToList()
            .ForEach(f => files.Add(f));

        Directory.GetDirectories(path).ToList()
            .ForEach(f => GetAllFiles(f, files));
    }
    catch (UnauthorizedAccessException ex)
    {
       //Console.WriteLine(ex);
    }
}

然后您可以打印结果如下

 var files = new List<string>();
 GetAllFiles(path ,files); 
 Method(files);   

答案 1 :(得分:1)

这是对的,你的应用程序无权访问某些文件夹(例如:系统文件夹),所以你需要处理这种情况。似乎在一行中做到这一点是不可能的。你需要这样的东西:

    void DiscoverDirs(string where, List<string> files)
    {
        try
        {
            files.AddRange(Directory.GetFiles(where));
            foreach (var dir in Directory.GetDirectories(where))
            {
                DiscoverDirs(dir, files);
            }
        }
        catch
        {
            // no access fo this dir
        }
    }

并调用语法:

   var list = new List<string>();
   DiscoverDirs("E:\\", list);

请注意,这可能需要一段时间。