65.9K
CodeProject is changing. Read more.
Home

Scan the Directory / Files (Calculating the size)

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.56/5 (26 votes)

Apr 18, 2004

viewsIcon

123204

downloadIcon

1189

Scans through the directory recursively and calculates the total size.

Screenshot

Introduction

It's a simple program which scans a directory recursively through the subfolders and sum up the size of the files. It also displays the size of the individual files, and eventually the total size of the directory.

Explanation

Observe the follows:

using System;
using System.IO;

We need to include System.IO, as we are working on Files and/or Directories.

The program starts as follows:

static void Main(string[] args) 
{
  //Creates an object of the class getFilesInfo 
  //and calls its function displayFileInfo()
  //The argument is passed to that function 
  //which is the path to a directory or a file.
  getFilesInfo obj = new getFilesInfo();
  obj.displayFileInfo(args[0]);

  // displayFileInfo() is the function which does everything and 
  // sets the static variable totsize to the total size of the dir/file
  //you passed as the argument.
  Console.WriteLine("Total Size = {0}", totsize);
}

Now, let's look at the crux of the program:

protected void displayFileInfo(String path)
{
  try
  {
    //Checks if the path is valid or not
    if(!Directory.Exists(path))
    {
      Console.WriteLine("invalid path");
    }
    else
    {
      try
      {
        //Directory.GetFiles() returns an array 
        //of strings which are not just
        //the file/directory name but the whole path to that
        //file folder.
        string[] fileList = Directory.GetFiles(path);
        for(int i=0; i {
          if(File.Exists(fileList[i]))
          {
            //File Info is a Class which extend FileSystemInfo class. 
            FileInfo finfo = new FileInfo(fileList[i]);
            //finfo.Length returns the File size. 
            totsize += finfo.Length;
            Console.WriteLine("FILE: "+fileList[i]+" :Size>"+ finfo.Length); 
          }
        }
      }
      catch( System.NotSupportedException e1)
      {
        Console.WriteLine("Error1"+e1.Message);
      }
      try
      {
        string[] dirList = Directory.GetDirectories(path);
        for(int i=0; i {
          Console.WriteLine("DIRECTORY CHANGED:" + dirList[i]); 
          //Call the function recursively to get 
          //the file sizes in the subfolder. 
          displayFileInfo(dirList[i]);
        }
      }
      catch( System.NotSupportedException e2)
      {
        Console.WriteLine("Error2:"+ e2.Message);
      }
    }
  }
  catch(System.UnauthorizedAccessException e)
  {
    Console.WriteLine("Error:"+ e.Message);
  }
}

You should have observed that we can't find the size of a folder directly. We should sum up the size of the files it constitutes. I think it is so because a Folder is just a pointer which points to the files and other directories. It has no size by itself. And one more thing is that the methods:

Directory.GetFiles(path);
Directory.GetDirectories(path);

return not just the file/directory name but the whole path to that file/folder.