列出我的计算机上的所有文件并按大小排序

2023-11-25

最近我遇到了一个问题,我的硬盘已经满得令人讨厌,但在检查了我的个人文件并删除/移动了所有超大的视频文件后,我仍然有相当少量的可用 ROM。因此,我让我的程序员大脑开始工作,决定不再亲自仔细检查每个文件夹和子文件夹,并使用 Windows 的右键单击 + 属性功能来查看文件有多大以及是否值得保留,我可以编写一个简单的代码,搜索计算机上的每个文件,按完整路径名将其放入列表中,并将其文件大小放在旁边,然后按文件大小从最大到最小进行排序。 所以我跳到网上,开始做研究,就在那时,一切都对我产生了影响。我发现了大量适合其指定任务的代码片段,但每当我尝试自己使用它们时,我都会遇到大量构建错误。也就是说,到目前为止我发现的最有希望的事情是:

const string dir = "C:\\";
string[] fns = Directory.GetFiles(dir);
var Sort = from fn in fns
           orderby new FileInfo(fn).Length descending
           select fn;
foreach (string n in Sort)
    Console.WriteLine(n);

不幸的是,这并没有触及任何子目录。我已经研究过如何从子目录中获取文件,但是尝试将这些代码片段与此代码片段集成起来比我想象的要麻烦得多。在极少数情况下,在隧道尽头看到曙光,我的程序会触及一个显然受管理员特权保护的目录(我是唯一的用户,因此也是我的计算机的管理员),并像黑猩猩一样抛出错误动物园扔粪便。

总的来说,我寻求帮助的是: - 搜索计算机上每个文件的程序(我假设从“C:/”驱动器开始我可以访问所有内容) -获取每个文件、其大小以及该文件的路径,并将其放入列表/数组/其他内容中 - 按文件大小从最大到最小排序 - 将此列表放入 .txt 文件中

最后一部分实际上不需要帮助,因为我对 Streamwriter 类相当熟悉。如果我的文件/路径/大小的列表/数组/等都符合相同的模式并且可以转换为字符串,我什至可以通过使用准简单的解析算法按文件大小排序来搞砸。因此,大约 90.23% 的问题只是获取所有文件、进入或忽略并继续受管理员保护的文件夹(我认为忽略它们是最好的,因为我非常怀疑受保护文件夹中的任何内容都不应该被删除。永远。)获取所有这些文件的路径和大小,并组织它们。


尝试 GetFiles 的另一个重载:

string[] fns = Directory.GetFiles(dir, "*", SearchOption.AllDirectories);

如果您使用 EnumerateFiles 也会更有效:

const string dir = "C:\\";
var Sort = Directory.EnumerateFiles(dir, "*", SearchOption.AllDirectories)
                    .OrderByDescending(f => new FileInfo(f).Length);
foreach (string n in Sort)
{
        Console.WriteLine(n);
}

为避免异常:

const string dir = "C:\\";
var fileInfos = new List<FileInfo>();
GetFiles(new DirectoryInfo(dir), fileInfos);
fileInfos.Sort((x, y) => y.Length.CompareTo(x.Length));
foreach (var f in fileInfos)
{
    Console.WriteLine(f.FullName);
}

private static void GetFiles(DirectoryInfo dirInfo, List<FileInfo> files)
{
    // get all not-system subdirectories
    var subDirectories = dirInfo.EnumerateDirectories()
        .Where(d => (d.Attributes & FileAttributes.System) == 0);
    foreach (DirectoryInfo subdirInfo in subDirectories)
    {
        GetFiles(subdirInfo, files);
    }
    // ok, now we added files from all subdirectories
    // so add non-system files from this directory
    var filesInCurrentDirectory = dirInfo.EnumerateFiles()
        .Where(f => (f.Attributes & FileAttributes.System) == 0);
    files.AddRange(filesInCurrentDirectory);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列出我的计算机上的所有文件并按大小排序 的相关文章

随机推荐