C# Directory
last modified May 1, 2025
This C# Directory tutorial demonstrates how to manage directories in C#. Our examples include creating, deleting, listing, and checking permissions of directories.
The C# List Directory tutorial provides a comprehensive guide on listing directory contents in C#, helping you navigate and manage file system structures effectively.
What Is a Directory?
A directory, commonly known as a folder, serves as a structured storage location for files on a computer. Directories can also contain subdirectories or shortcuts, allowing for organized data management.
Working with Directories in C#
C# provides two primary classes for directory handling:
Directory
- A static class offering methods for creating, deleting, and manipulating directories.DirectoryInfo
- An instance-based class that provides detailed information about a specific directory, including attributes and metadata.
Both classes are part of the System.IO
namespace and serve distinct
purposes—while Directory
is ideal for quick operations,
DirectoryInfo
is better suited for working with directory objects
and retrieving extended details.
C# create directory
Use the Directory.CreateDirectory
method to create a directory.
var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var dirName = $@"{docPath}\test"; DirectoryInfo di = Directory.CreateDirectory(dirName); Console.WriteLine($"Full name: {di.FullName}, Name: {di.Name}, Parent: {di.Parent}"); if (Directory.Exists(dirName)) { Console.WriteLine("Directory exists"); } else { Console.WriteLine("Directory does not exist"); }
This example creates a test
directory in the user's
Documents
folder.
var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
We retrieve the MyDocuments
folder path using
Environment.GetFolderPath
.
var dirName = $@"{docPath}\test";
This defines the full path for the new directory.
DirectoryInfo di = Directory.CreateDirectory(dirName); Console.WriteLine($"Full name: {di.FullName}, Name: {di.Name}, Parent: {di.Parent}");
The Directory.CreateDirectory
method creates a directory and
returns a DirectoryInfo
object. We print its full name, name,
and parent directory.
if (Directory.Exists(dirName)) { Console.WriteLine("Directory exists"); } else { Console.WriteLine("Directory does not exist"); }
The Directory.Exists
method checks if the specified directory
exists.
C# get current directory
The Directory.GetCurrentDirectory
method retrieves the
application's current working directory.
var curDir = Directory.GetCurrentDirectory(); Console.WriteLine(curDir); Console.WriteLine(Directory.GetDirectoryRoot(curDir));
This program displays the current working directory and its root, obtained
using Directory.GetDirectoryRoot
.
$ dotnet run C:\Users\Jano\Documents\csharp\directory\CurrentDirectory C:\
C# delete directory
Use the Directory.Delete
method to remove a directory.
var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var myDir = $@"{docPath}/test3"; Directory.CreateDirectory(myDir); Console.WriteLine(Directory.Exists(myDir)); Directory.Delete(myDir); Console.WriteLine(Directory.Exists(myDir));
This example creates a directory, verifies its existence, deletes it, and checks its existence again.
$ dotnet run True False
C# move directory
The Directory.Move
method renames or moves a directory.
var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var sourceDir = $@"{docPath}\test"; var destDir = $@"{docPath}\test2"; Directory.Move(sourceDir, destDir);
This example renames a directory.
Directory.Move(sourceDir, destDir);
The Directory.Move
method takes source and destination
directory paths as parameters.
C# list drives
The Directory.GetLogicalDrives
method lists the names of
logical drives in the format
.
string[] drives = Directory.GetLogicalDrives(); foreach (string drive in drives) { System.Console.WriteLine(drive); }
This example displays all drives on the computer.
C# list directories
The Directory.GetDirectories
method returns subdirectory names,
optionally matching specified criteria.
var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); string[] myDirs = Directory.GetDirectories(docPath); Console.WriteLine("Directories:"); foreach (var myDir in myDirs) { Console.WriteLine(myDir); }
This example lists all subdirectories in the specified directory.
The next example filters directories based on specific criteria.
var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); Console.WriteLine(docPath); string[] myDirs = Directory.GetDirectories(docPath, "w*", SearchOption.TopDirectoryOnly); Console.WriteLine("Directories:"); foreach (var myDir in myDirs) { Console.WriteLine(myDir); }
This example lists directories starting with the letter w
.
string[] myDirs = Directory.GetDirectories(docPath, "w*", SearchOption.TopDirectoryOnly);
The Directory.GetDirectories
method accepts the directory path,
a search pattern for subdirectory names, and a search option to limit to the
current directory or include subdirectories.
C# list files
The Directory.GetFiles
method returns file names, optionally
matching specified criteria.
var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); string[] myFiles = Directory.GetFiles(docPath); Console.WriteLine("Files:"); foreach (var myFile in myFiles) { Console.WriteLine(myFile); }
This example lists all files in the user's Documents
folder.
C# directory times
The Directory.GetCreationTime
method retrieves a directory's
creation date and time. Directory.GetLastAccessTime
gets the
last access date and time, and Directory.GetLastWriteTime
fetches the last write date and time.
var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var myDir = $@"{docPath}\test"; var creationTime = Directory.GetCreationTime(myDir); var lastAccessTime = Directory.GetLastAccessTime(myDir); var lastWriteTime = Directory.GetLastWriteTime(myDir); Console.WriteLine($"Creation time: {creationTime}"); Console.WriteLine($"Last access time: {lastAccessTime}"); Console.WriteLine($"Last write time: {lastWriteTime}");
This example prints the creation, last access, and last write times of the specified directory.
C# list entries
The Directory.GetFileSystemEntries
method returns names of all
files and subdirectories, optionally matching specified criteria.
var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); string[] entries = Directory.GetFileSystemEntries(docPath, "w*"); Console.WriteLine("Entries:"); foreach (var entry in entries) { Console.WriteLine(entry); }
This program lists all entries starting with w
in the specified
directory.
C# directory size
The following example calculates a directory's size.
var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); long size = 0; var myDir = $@"{docPath}/csharp"; var dirInfo = new DirectoryInfo(myDir); foreach (FileInfo fi in dirInfo.GetFiles("*", SearchOption.AllDirectories)) { size += fi.Length; } Console.WriteLine($"The directory size: {size} bytes");
To calculate a directory's size, we use DirectoryInfo
's
GetFiles
method, which returns an array of FileInfo
objects. The Length
property of FileInfo
provides
each file's size.
foreach (FileInfo fi in dirInfo.GetFiles("*", SearchOption.AllDirectories)) { size += fi.Length; }
We iterate through all files in the directory and its subdirectories, summing their sizes.
C# copy directory
The following example copies a directory.
var source = @"C:\Users\Jano\Documents\websites"; var dest = @"C:\Users\Jano\Documents\websites-2"; DirectoryCopy(source, dest, true); Console.WriteLine("Copying finished"); void DirectoryCopy(string source, string dest, bool copySubDirs = true) { var dir = new DirectoryInfo(source); if (!dir.Exists) { throw new DirectoryNotFoundException( $"Source directory does not exist or could not be found: {source}"); } DirectoryInfo[] dirs = dir.GetDirectories(); if (!Directory.Exists(dest)) { Directory.CreateDirectory(dest); } FileInfo[] files = dir.GetFiles(); foreach (FileInfo file in files) { string tempPath = Path.Combine(dest, file.Name); file.CopyTo(tempPath, false); } if (copySubDirs) { foreach (DirectoryInfo subdir in dirs) { string tempPath = Path.Combine(dest, subdir.Name); DirectoryCopy(subdir.FullName, tempPath, copySubDirs); } } }
This example copies a directory and its subdirectories to a new location.
var source = @"C:\Users\Jano\Documents\websites"; var dest = @"C:\Users\Jano\Documents\websites-2";
We specify the source and destination directory paths.
DirectoryCopy(source, dest, true);
The DirectoryCopy
method handles the copying, with the third
parameter indicating whether to include subdirectories.
var dir = new DirectoryInfo(source); if (!dir.Exists) { throw new DirectoryNotFoundException( $"Source directory does not exist or could not be found: {source}"); }
We create a DirectoryInfo
object for the source path and check
if it exists, throwing a DirectoryNotFoundException
if it does
not.
DirectoryInfo[] dirs = dir.GetDirectories();
We retrieve all top-level directories using GetDirectories
.
if (!Directory.Exists(dest)) { Directory.CreateDirectory(dest); }
We create the destination directory if it does not exist.
FileInfo[] files = dir.GetFiles(); foreach (FileInfo file in files) { string tempPath = Path.Combine(dest, file.Name); file.CopyTo(tempPath, false); }
We retrieve and copy all files to the destination directory.
if (copySubDirs) { foreach (DirectoryInfo subdir in dirs) { string tempPath = Path.Combine(dest, subdir.Name); DirectoryCopy(subdir.FullName, tempPath, copySubDirs); } }
If copySubDirs
is true, we recursively copy subdirectories and
their contents.
C# directory access control list
An access control list (ACL) contains access control entries (ACEs). Each ACE identifies a trustee and specifies their allowed, denied, or audited access rights.
The DirectoryInfo.GetAccessControl
method retrieves the ACL
entries for a directory.
$ dotnet add package System.IO.FileSystem.AccessControl
We must include the System.IO.FileSystem.AccessControl
package.
using System.Security.AccessControl; var docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var myDir = $@"{docPath}\test"; var dirInfo = new DirectoryInfo(myDir); DirectorySecurity dSecurity = dirInfo.GetAccessControl(); AuthorizationRuleCollection acl = dSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)); foreach (FileSystemAccessRule ace in acl) { Console.WriteLine("Account: {0}", ace.IdentityReference.Value); Console.WriteLine("Type: {0}", ace.AccessControlType); Console.WriteLine("Rights: {0}", ace.FileSystemRights); Console.WriteLine("Inherited: {0}", ace.IsInherited); Console.WriteLine("------------------------"); }
This example displays the ACL for the specified directory.
var dirInfo = new DirectoryInfo(myDir);
We create a DirectoryInfo
object for the directory.
DirectorySecurity dSecurity = dirInfo.GetAccessControl();
The GetAccessControl
method returns a
DirectorySecurity
object containing the directory's access
control rules.
AuthorizationRuleCollection acl = dSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
We obtain a collection of security rules using GetAccessRules
.
foreach (FileSystemAccessRule ace in acl) { Console.WriteLine("Account: {0}", ace.IdentityReference.Value); Console.WriteLine("Type: {0}", ace.AccessControlType); Console.WriteLine("Rights: {0}", ace.FileSystemRights); Console.WriteLine("Inherited: {0}", ace.IsInherited); Console.WriteLine("------------------------"); }
We iterate through the access control rules and display them.
Source
Directory class - language reference
This article explored working with directories in C#.
Author
List all C# tutorials.