我想列出驱动器中的所有文件,我也在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);
}
答案 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);
请注意,这可能需要一段时间。