using System;
using System.IO;

namespace Addison_Wesley.Codebook.Filesystem
{
   public class FolderUtil
   {
      /// <summary>
      /// (Rekurzivně) zjistí celkovou velikost všech souborů v daném adresáři a všech jeho podadresářích 
      /// </summary>
      /// <param name="folder">Reference na objekt typu DirectoryInfo, který představuje daný adresář</param>
       /// <returns>Vrátí celkovou velikost všech souborů v bajtech</returns>
      public static long GetFolderSize(DirectoryInfo folder)
      {
         // Proměnná pro uložení dosud zjištěného součtu velikostí souborů
         // v (pod)adresáři
         long folderSize = 0;

         // Zjistíme součet velikostí souborů
         FileInfo[] files = folder.GetFiles();
         for (int i = 0; i < files.Length; i++)
         {
            folderSize += files[i].Length;
         }

         // Zjištění podadresářů a rekurzivní volání této metody
         // umožní výpočet hodnoty proměnné folderSize
         DirectoryInfo[] subFolders = folder.GetDirectories();
         for (int i = 0; i < subFolders.Length; i++)
         {
            folderSize += FolderUtil.GetFolderSize(subFolders[i]);
         }

         // Vrátíme zjištěnou velikost
         return folderSize;
      }

      /// <summary>
      /// Vrátí celkovou velikost souborů v daném adresáři a jeho podadresářích
      /// </summary>
      /// <param name="folderPath">Cesta k adresáři</param>
      /// <returns>Vrátí celkovou velikost souborů v bajtech</returns>
      public static long GetFolderSize(string folderPath)
      {
         // Volání rekurzivní metody pro zjištění velikosti adresáře
         return FolderUtil.GetFolderSize(new DirectoryInfo(folderPath));
      }
   }
}
