C# 中磁盘上文件夹的大小,用于主文件夹,然后是子文件夹。子文件夹的帮助

Size of the folder on disk in C# for main folder and then sub folders. Help for sub folders

我是 C# 世界的新手,我正在尝试获取目录/文件夹的 dis 大小。下面是文件夹和子文件夹总大小的代码。我想要这个总大小,但我更想要的是为目录中的其他子文件夹获得相同的结果。例如:main Directory/Folder 是 Fruit,它有名为 Orange、Apple、Mango 等的子文件夹。所以这段代码获取了 Fruit 的总大小,但现在我也想单独列出 Orange、Apple、Mango 的总大小。

请帮我修改代码!

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;
    }

做以下事情怎么样?

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;
        }
    }

不包括一些错误检查。

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

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;
    }
  }