【发布时间】:2018-11-24 22:04:57
【问题描述】:
我正在尝试编写一些代码,按大小对系统上的所有文件和文件夹进行排序,并将其放入 txt 文件中。比如……
/Users: 25Gb
/Users/me: 20Gb
/Users/me/films: 11Gb
/Users/me/films/Shrek.mkv 6Gb
/Users/me/films/Shrek2.mkv 5Gb
/Users/me/Documents: 9Gb
/Users/me/Documents: myBigFile.rar 5Gb
/Users/me/Documents: mySmallerFile.rar 4Gb
/Users/mum: 5Gb
/Users/mum/documents: 5Gb
/Users/mum/documents: mumsFile.zip 5Gb
您会看到图片 - 按大小排序的文件夹,以及按文件排序的所有子文件夹/文件(可能带有像上面那样的缩进)。到目前为止,我的代码(如下)从我下载的所有文件夹中获取所有文件并对它们进行排序,然后将总大小放在文件末尾。有谁知道我可以从这里去哪里?谢谢!
static void ProcessDirectory(string writeTo, string inPath)
{
var Sort = Directory.EnumerateFiles(inPath, "*", SearchOption.AllDirectories)
.OrderByDescending(f => new FileInfo(f).Length);
long b = 0;
TextWriter tw = new StreamWriter(writeTo, true);
foreach (string name in Sort)
{
FileInfo info = new FileInfo(name);
long len = info.Length;
tw.WriteLine(name + ": " + len);
b += info.Length;
}
tw.WriteLine(b);
tw.Close();
// 4.
// Return total size
}
static void Main(string[] args)
{
string outPath = @"/Users/a/Documents/size.txt";
TextWriter tw = new StreamWriter(outPath, true); //This must come first to create the file
ProcessDirectory(outPath, @"/Users/a/Downloads");
tw.Close();
}
【问题讨论】:
-
所以基本上尝试重新发明 TreeSize?
-
使用递归来做到这一点。在线查找示例,您会发现数以千计的示例。
-
或
.GroupBy([DirectoryName])枚举目录,然后迭代分组中的项目。