Linq 是否从所有硬盘驱动器中选择不同的文件类型扩展名?
有什么方法可以在我的系统中的所有驱动器上获得文件扩展名的不同列表吗?嗯,是的,总是有蛮力方法Linq 是否从所有硬盘驱动器中选择不同的文件类型扩展名?,linq,filesystems,Linq,Filesystems,有什么方法可以在我的系统中的所有驱动器上获得文件扩展名的不同列表吗?嗯,是的,总是有蛮力方法 static void Main(string[] args) { Dictionary<string, int> Extenstions = new Dictionary<string, int>(); PopulateExtenstions("C:\\", Extenstions); foreach (str
static void Main(string[] args)
{
Dictionary<string, int> Extenstions = new Dictionary<string, int>();
PopulateExtenstions("C:\\", Extenstions);
foreach (string key in Extenstions.Keys)
{
Console.Write("{0}\t{1}", key, Extenstions[key]);
}
Console.ReadKey(true);
}
private static void PopulateExtenstions(string path, Dictionary<string, int> extenstions)
{
string[] files = null;
string[] subdirs = null;
try
{
files = Directory.GetFiles(path);
}
catch (UnauthorizedAccessException)
{
}
try
{
subdirs = Directory.GetDirectories(path);
}
catch (UnauthorizedAccessException)
{
}
if (files != null)
{
foreach (string file in files)
{
var fi = new FileInfo(file);
if (extenstions.ContainsKey(fi.Extension))
{
extenstions[fi.Extension]++;
}
else
{
extenstions[fi.Extension] = 1;
}
}
}
if (subdirs != null)
{
foreach (string sub in subdirs)
{
PopulateExtenstions(sub, extenstions);
}
}
}
像这样的方法应该会奏效:
var e = (from d in DriveInfo.GetDrives()
from f in d.RootDirectory.GetFiles("*.*", SearchOption.AllDirectories)
select f.Extension).Distinct();
这对我来说是个例外。UnauthorizedAccessException。从技术上讲,这是正确的;它告诉你你没有足够的权限去找出你问题的答案。如果你的意思是“我想为我在系统中所有驱动器上都可以访问的文件获取一个不同的文件扩展名列表”,那么你可以使用John的较长回答,该回答丢弃未经授权的访问异常。但是,是的,我猜如果它导致异常……或者可以将其拆分一点以进行尝试捕获?
var e = (from d in DriveInfo.GetDrives()
from f in d.RootDirectory.GetFiles("*.*", SearchOption.AllDirectories)
select f.Extension).Distinct();