我正在尝试列出我的c驱动器的所有文件夹,不包括我似乎无法访问的文档文件夹。这首先对我来说似乎相当简单,但我发现自己仍然在努力解决它,尽管看似丰富的.net库。
我无法发布任何代码,因为到目前为止我所尝试的并不真正有用。
希望有人会提出建议。
答案 0 :(得分:1)
这里有一个小例子:
class DirectorySize
{
public string DirectoryName;
public long DirectorySizes;
}
public class Program
{
static void Main(string[] args)
{
string[] cDirectories = Directory.GetDirectories("C:\\");
List<DirectorySize> listSizes = new List<DirectorySize>();
for (int i = 0; i < cDirectories.Length; i++)
{
long size = GetDirectorySize(cDirectories[i]);
if(size != -1)
{
listSizes.Add(new DirectorySize() { DirectoryName = cDirectories[i], DirectorySizes = size });
}
}
}
private static long GetDirectorySize(string folderPath)
{
try
{
DirectoryInfo di = new DirectoryInfo(folderPath);
return di.EnumerateFiles("*", SearchOption.AllDirectories).Sum(fi => fi.Length);
}
catch
{
// If you get Access denied error handle it here
return -1;
}
}
}
答案 1 :(得分:0)
另一种方法是实现LINQ扩展方法(从this question的最佳答案中无耻地窃取:
public static class Extensions
{
public static IEnumerable<T> SkipExceptions<T>(this IEnumerable<T> values)
{
using (var enumerator = values.GetEnumerator())
{
bool next = true;
while (next)
{
try
{
next = enumerator.MoveNext();
}
catch
{
continue;
}
if (next) yield return enumerator.Current;
}
}
}
}
然后您可以按如下方式运行枚举器:
DirectoryInfo di = new DirectoryInfo(@"C:\");
var size =
di.EnumerateFiles("*", SearchOption.AllDirectories)
.SkipExceptions()
.Sum(fi => fi.Length);