在 C# 中,主文件夹和子文件夹的磁盘上文件夹的大小.子文件夹的帮助

本文关键字:文件夹 磁盘 帮助 主文件 | 更新日期: 2023-09-27 18:35:52

我是C#世界的新手,我正在尝试获取目录/文件夹的dis大小。以下是文件夹和子文件夹总大小的代码。我想要这个总大小,但我更想要的是为目录中的其他子文件夹获得相同的结果。例如:主目录/文件夹是水果,它有名为橙色,苹果,芒果等的子文件夹。所以这段代码得到了水果的总大小,但现在我希望橙子、苹果、芒果的总大小也单独列出。

请帮我修复代码!

class Program
{
    static void Main(string[] args)
    {
        DirectoryInfo dInfo = new DirectoryInfo(@"C:'Users");
        long sizeOfDir = DiskSize(dInfo, true);
        Console.WriteLine("Size on disk in MB : " +
        "{0:N2} MB", ((double)sizeOfDir) / (1024 * 1024));
        Console.ReadLine();
    }
    static long DiskSize(DirectoryInfo dInfo, bool includeSubDir)
    {
        long totalSize = dInfo.EnumerateFiles()
                     .Sum(file => file.Length);

        if (includeSubDir)
        {
            totalSize += dInfo.EnumerateDirectories()
                     .Sum(dir => DiskSize(dir, true));
        }
        return totalSize;
    }

在 C# 中,主文件夹和子文件夹的磁盘上文件夹的大小.子文件夹的帮助

这是我测试过的代码。给出每个目录的结果。

class Program {
    static void Main(string[] args) {
      DirectoryInfo dInfo = new DirectoryInfo(@"D:'temp");
      foreach (DirectoryInfo item in dInfo.EnumerateDirectories()) {
        long sizeOfDir = DiskSize(item, true);

      Console.WriteLine("Size on disk in MB : " +
      "{0:N2} MB", ((double)sizeOfDir) / (1024 * 1024));

      }
      Console.ReadLine();
    }
    static long DiskSize(DirectoryInfo dInfo, bool includeSubDir) {
      long totalSize = dInfo.EnumerateFiles()
                   .Sum(file => file.Length);

      if (includeSubDir) {
        totalSize += dInfo.EnumerateDirectories()
                 .Sum(dir => DiskSize(dir, true));
      }
      return totalSize;
    }
  }

执行以下操作怎么样?

var files = Directory.GetFiles(@"C:'Users", "*.*", SearchOption.AllDirectories);
long totalSize = 0;
foreach (string name in files)
{
   var info = new FileInfo(name);
   totalSize += info.Length;
}
return totalSize;

您可以使用 GetDirectories() 方法,并以递归方式调用函数,获取每个 DirectoryInfo 对象的磁盘大小。

    static void Main(string[] args)
    {
        ScanDisksForSize(new DirectoryInfo(@"C:'Users"));
        Console.ReadLine();
    }
    static void ScanDirectoriesForSize(DirectoryInfo topDir)
    {
        long sizeOfDir;
        if (topDir != null)
            sizeOfDir = DiskSize(topDir);
        else
            return;
        Console.WriteLine("Size on disk of {0}: {1:N2} MB", topDir.Name, ((double)sizeOfDir) / (1024 * 1024));
        //Do subfolders
        var subFolders = topDir.GetDirectories();
        if (subFolders == null)
            return;
        foreach (var folder in subFolders)
            ScanDisksForSize(folder);
    }
    static long DiskSize(DirectoryInfo dInfo)
    {
        try
        {   
            long totalSize = dInfo.EnumerateFiles().Sum(file => file.Length);
        return totalSize;
        }
        catch (Exception)
        {
            return 0;
        }
    }

不要包含一些错误检查。