【问题标题】:list all file from folder and subfolder in drive using c# [duplicate]使用c#列出驱动器中文件夹和子文件夹中的所有文件[重复]
【发布时间】:2013-12-09 02:30:46
【问题描述】:

我想列出驱动器中的所有文件,并且我也在 C# 中尝试此代码。但我得到未经授权的文件访问异常。 请给我正确的解决方案,以便我可以继续我的工作....

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);
}

【问题讨论】:

  • 机器上是否启用了 UAC?
  • 以管理员身份运行?

标签: c#


【解决方案1】:

您可以有方法来获取目录中的文件并递归调用该目录,如下所示

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);   

【讨论】:

    【解决方案2】:

    没错,您的应用无法访问某些文件夹(例如:系统文件夹),因此您需要处理这种情况。似乎不可能在一行中做到这一点。你需要这样的东西:

        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);
    

    请注意,这可能需要很长时间。

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 2013-05-01
      • 2019-07-21
      • 2020-07-02
      • 2011-05-11
      • 2016-02-26
      • 2011-10-30
      • 2018-08-06
      相关资源
      最近更新 更多