Thursday, June 18, 2026

C# functionalities in Directory class which are not available in DirectoryInfo class and vice versa

What are special functionalities in Directory class which are not available in DirectoryInfo class and vice versa?

Directory and DirectoryInfo overlap a lot, but they are designed differently.

  • Directory → static utility class (you work with paths as strings)
  • DirectoryInfo → instance-based class (you work with a directory object)

👉Most operations exist in both. The main differences are about style, state, and convenience, not unique capabilities.

Functionalities in Directory that DirectoryInfo does NOT have

  1. Static methods (no object creation)

You don't need to create a DirectoryInfo.

Directory.CreateDirectory(@"C:\Data");
Directory.Delete(@"C:\Temp");

Equivalent with DirectoryInfo:

DirectoryInfo dir = new DirectoryInfo(@"C:\Data");
dir.Create();

Useful when:

  • You only need a one-time operation
  • You already have path strings
  1. Current directory management

Directory contains application-level operations.

Directory.SetCurrentDirectory(@"C:\Projects");
string current = Directory.GetCurrentDirectory();

DirectoryInfo has no equivalent.

  1. Logical drive root helper
string root = Directory.GetDirectoryRoot(@"D:\Work\Test");

No equivalent in DirectoryInfo.

Functionalities in DirectoryInfo that Directory does NOT have

  1. Cached directory metadata (inherits from FileSystemInfo)

You can access properties directly:

DirectoryInfo dir = new DirectoryInfo(@"C:\Data");
Console.WriteLine(dir.CreationTime);
Console.WriteLine(dir.LastWriteTime);
Console.WriteLine(dir.Attributes);
Console.WriteLine(dir.Exists);
Directory has methods for some of these:
Directory.GetCreationTime(path);

But it doesn't hold state.

  1. Parent directory access
DirectoryInfo dir =  new DirectoryInfo(@"C:\Data\Test");
Console.WriteLine(dir.Parent?.Name);

No direct Directory.Parent is available.

  1. Navigate object hierarchy
DirectoryInfo dir = new DirectoryInfo(@"C:\Data");
DirectoryInfo[] subdirs = dir.GetDirectories();
FileInfo[] files = dir.GetFiles();

You immediately get DirectoryInfo / FileInfo objects.

With Directory:

string[] dirs = Directory.GetDirectories(path);

Only strings are returned.

  1. Rename using MoveTo()
DirectoryInfo dir =  new DirectoryInfo(@"C:\Old");
dir.MoveTo(@"C:\New");

Directory.Move() exists too, but instance style can feel cleaner.

Example where DirectoryInfo becomes nicer

The following LINQ example repeatedly creates DirectoryInfo.

Instead of:

Directory.GetDirectories(path)
         .Select(x => new DirectoryInfo(x))

Prefer:

DirectoryInfo dir =  new DirectoryInfo(path);
foreach (DirectoryInfo d in dir.GetDirectories())
{
    Console.WriteLine(d.Name);
}

No repeated object creation.

Rule of thumb

Use Prefer
One quick operation Directory
Multiple operations on same folder DirectoryInfo
Need metadata (Parent, CreationTime) DirectoryInfo
Need current working directory Directory

So DirectoryInfo isn't more powerful—it mainly provides an object-oriented wrapper over directory operations plus metadata caching through FileSystemInfo.

 

No comments:

Post a Comment

Hot Topics