Click to Rate and Give Feedback
TechNet
TechNet Library
Collapse All/Expand All Collapse All
.NET Framework Class Library
Directory Class

Exposes static methods for creating, moving, and enumerating through directories and subdirectories. This class cannot be inherited.

System..::.Object
  System.IO..::.Directory

Namespace:  System.IO
Assembly:  mscorlib (in mscorlib.dll)
Visual Basic
<ComVisibleAttribute(True)> _
Public NotInheritable Class Directory
C#
[ComVisibleAttribute(true)]
public static class Directory
Visual C++
[ComVisibleAttribute(true)]
public ref class Directory abstract sealed
F#
[<AbstractClass>]
[<Sealed>]
[<ComVisibleAttribute(true)>]
type Directory =  class end

The Directory type exposes the following members.

  NameDescription
Public methodStatic memberSupported by the XNA FrameworkCreateDirectory(String)Creates all directories and subdirectories in the specified path.
Public methodStatic memberCreateDirectory(String, DirectorySecurity)Creates all the directories in the specified path, applying the specified Windows security.
Public methodStatic memberSupported by the XNA FrameworkDelete(String)Deletes an empty directory from a specified path.
Public methodStatic memberSupported by the XNA FrameworkDelete(String, Boolean)Deletes the specified directory and, if indicated, any subdirectories and files in the directory.
Public methodStatic memberEnumerateDirectories(String)Returns an enumerable collection of directory names in a specified path.
Public methodStatic memberEnumerateDirectories(String, String)Returns an enumerable collection of directory names that match a search pattern in a specified path.
Public methodStatic memberEnumerateDirectories(String, String, SearchOption)Returns an enumerable collection of directory names that match a search pattern in a specified path, and optionally searches subdirectories.
Public methodStatic memberEnumerateFiles(String)Returns an enumerable collection of file names in a specified path.
Public methodStatic memberEnumerateFiles(String, String)Returns an enumerable collection of file names that match a search pattern in a specified path.
Public methodStatic memberEnumerateFiles(String, String, SearchOption)Returns an enumerable collection of file names that match a search pattern in a specified path, and optionally searches subdirectories.
Public methodStatic memberEnumerateFileSystemEntries(String)Returns an enumerable collection of file-system entries in a specified path.
Public methodStatic memberEnumerateFileSystemEntries(String, String)Returns an enumerable collection of file-system entries that match a search pattern in a specified path.
Public methodStatic memberEnumerateFileSystemEntries(String, String, SearchOption)Returns an enumerable collection of file names and directory names that match a search pattern in a specified path, and optionally searches subdirectories.
Public methodStatic memberSupported by the XNA FrameworkExistsDetermines whether the given path refers to an existing directory on disk.
Public methodStatic memberGetAccessControl(String)Gets a DirectorySecurity object that encapsulates the access control list (ACL) entries for a specified directory.
Public methodStatic memberGetAccessControl(String, AccessControlSections)Gets a DirectorySecurity object that encapsulates the specified type of access control list (ACL) entries for a specified directory.
Public methodStatic memberSupported by the XNA FrameworkGetCreationTimeGets the creation date and time of a directory.
Public methodStatic memberGetCreationTimeUtcGets the creation date and time, in Coordinated Universal Time (UTC) format, of a directory.
Public methodStatic memberSupported by the XNA FrameworkGetCurrentDirectoryGets the current working directory of the application.
Public methodStatic memberSupported by the XNA FrameworkGetDirectories(String)Gets the names of subdirectories (including their paths) in the specified directory.
Public methodStatic memberSupported by the XNA FrameworkGetDirectories(String, String)Gets an array of directories (including their paths) that match the specified search pattern in the current directory.
Public methodStatic memberGetDirectories(String, String, SearchOption)Gets the names of the directories (including their paths) that match the specified search pattern in the current directory, and optionally searches subdirectories.
Public methodStatic memberSupported by the XNA FrameworkGetDirectoryRootReturns the volume information, root information, or both for the specified path.
Public methodStatic memberSupported by the XNA FrameworkGetFiles(String)Returns the names of files (including their paths) in the specified directory.
Public methodStatic memberSupported by the XNA FrameworkGetFiles(String, String)Returns the names of files (including their paths) that match the specified search pattern in the specified directory.
Public methodStatic memberGetFiles(String, String, SearchOption)Returns the names of files (including their paths) that match the specified search pattern in the specified directory, using a value to determine whether to search subdirectories.
Public methodStatic memberSupported by the XNA FrameworkGetFileSystemEntries(String)Returns the names of all files and subdirectories in the specified directory.
Public methodStatic memberSupported by the XNA FrameworkGetFileSystemEntries(String, String)Returns an array of file system entries that match the specified search criteria.
Public methodStatic memberGetFileSystemEntries(String, String, SearchOption)Gets an array of all the file names and directory names that match a search pattern in a specified path, and optionally searches subdirectories.
Public methodStatic memberSupported by the XNA FrameworkGetLastAccessTimeReturns the date and time the specified file or directory was last accessed.
Public methodStatic memberGetLastAccessTimeUtcReturns the date and time, in Coordinated Universal Time (UTC) format, that the specified file or directory was last accessed.
Public methodStatic memberSupported by the XNA FrameworkGetLastWriteTimeReturns the date and time the specified file or directory was last written to.
Public methodStatic memberGetLastWriteTimeUtcReturns the date and time, in Coordinated Universal Time (UTC) format, that the specified file or directory was last written to.
Public methodStatic memberGetLogicalDrivesRetrieves the names of the logical drives on this computer in the form "<drive letter>:\".
Public methodStatic memberGetParentRetrieves the parent directory of the specified path, including both absolute and relative paths.
Public methodStatic memberSupported by the XNA FrameworkMoveMoves a file or a directory and its contents to a new location.
Public methodStatic memberSetAccessControlApplies access control list (ACL) entries described by a DirectorySecurity object to the specified directory.
Public methodStatic memberSetCreationTimeSets the creation date and time for the specified file or directory.
Public methodStatic memberSetCreationTimeUtcSets the creation date and time, in Coordinated Universal Time (UTC) format, for the specified file or directory.
Public methodStatic memberSupported by the XNA FrameworkSetCurrentDirectorySets the application's current working directory to the specified directory.
Public methodStatic memberSetLastAccessTimeSets the date and time the specified file or directory was last accessed.
Public methodStatic memberSetLastAccessTimeUtcSets the date and time, in Coordinated Universal Time (UTC) format, that the specified file or directory was last accessed.
Public methodStatic memberSetLastWriteTimeSets the date and time a directory was last written to.
Public methodStatic memberSetLastWriteTimeUtcSets the date and time, in Coordinated Universal Time (UTC) format, that a directory was last written to.
Top

Use the Directory class for typical operations such as copying, moving, renaming, creating, and deleting directories. You can also use the Directory class to get and set DateTime information related to the creation, access, and writing of a directory.

Because all Directory methods are static, it might be more efficient to use a Directory method rather than a corresponding DirectoryInfo instance method if you want to perform only one action. Most Directory methods require the path to the directory that you are manipulating.

The static methods of the Directory class perform security checks on all methods. If you are going to reuse an object several times, consider using the corresponding instance method of DirectoryInfo instead, because the security check will not always be necessary.

NoteNote

In members that accept a path as an input string, that path must be well-formed or an exception is raised; however, if a path is fully qualified but begins with a space, the space is not omitted but no exception is raised. Similarly, a path or a combination of paths cannot be fully qualified twice. For example, "c:\temp c:\windows" also raises an exception in most cases. Ensure that your paths are well-formed when using methods that accept a path string.

In members that accept a path, the path can refer to a file or just a directory. The specified path can also refer to a relative path or a Universal Naming Convention (UNC) path for a server and share name. For example, all the following are acceptable paths:

  • "c:\\MyDir" in C#, or "c:\MyDir" in Visual Basic.

  • "MyDir\\MySubdir" in C#, or "MyDir\MySubDir" in Visual Basic.

  • "\\\\MyServer\\MyShare" in C#, or "\\MyServer\MyShare" in Visual Basic.

By default, full read/write access to new directories is granted to all users. Demanding permission for a directory where the path string ends with the directory separator character results in demanding permissions for all the contained subdirectories (for example, "C:\Temp\"). If permissions are required only for a specific directory, the string should end with a period (for example, "C:\Temp\.").

For a list of common I/O tasks, see Common I/O Tasks.

The following code example determines whether a specified directory exists, deletes it if it exists, and creates it if it does not exist. This example then moves the directory, creates a file in the directory, and counts the files in the directory.

Visual Basic
Imports System
Imports System.IO

Public Class Test

    Public Shared Sub Main()
        'Specify the directories you want to manipulate.
        Dim path As String = "c:\MyDir"
        Dim target As String = "c:\TestDir"

        Try
            ' Determine whether the directory exists.
            If Directory.Exists(path) = False Then
                ' Create the directory.
                Directory.CreateDirectory(path)
            End If

            If Directory.Exists(target) Then
                ' Delete the target to ensure it is not there.
                Directory.Delete(target, True)
            End If

            ' Move the directory.
            Directory.Move(path, target)

            'Create a file in the directory.
            File.CreateText(target + "\myfile.txt")

            'Count the files in the target.
            Console.WriteLine("The number of files in {0} is {1}", _
              target, Directory.GetFiles(target).Length)

        Catch e As Exception
            Console.WriteLine("The process failed: {0}", e.ToString())
        End Try
    End Sub
End Class
C#
using System;
using System.IO;

class Test 
{
    public static void Main() 
    {
        // Specify the directories you want to manipulate.
        string path = @"c:\MyDir";
        string target = @"c:\TestDir";

        try 
        {
            // Determine whether the directory exists.
            if (!Directory.Exists(path)) 
            {
                // Create the directory it does not exist.
                Directory.CreateDirectory(path);
            }

            if (Directory.Exists(target)) 
            {
                // Delete the target to ensure it is not there.
                Directory.Delete(target, true);
            }

            // Move the directory.
            Directory.Move(path, target);

            // Create a file in the directory.
            File.CreateText(target + @"\myfile.txt");

            // Count the files in the target directory.
            Console.WriteLine("The number of files in {0} is {1}",
                target, Directory.GetFiles(target).Length);
        } 
        catch (Exception e) 
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        } 
        finally {}
    }
}
Visual C++
using namespace System;
using namespace System::IO;
int main()
{

   // Specify the directories you want to manipulate.
   String^ path = "c:\\MyDir";
   String^ target = "c:\\TestDir";
   try
   {

      // Determine whether the directory exists.
      if (  !Directory::Exists( path ) )
      {

         // Create the directory it does not exist.
         Directory::CreateDirectory( path );
      }
      if ( Directory::Exists( target ) )
      {

         // Delete the target to ensure it is not there.
         Directory::Delete( target, true );
      }

      // Move the directory.
      Directory::Move( path, target );

      // Create a file in the directory.
      File::CreateText( String::Concat( target, "\\myfile.txt" ) );

      // Count the files in the target directory.
      Console::WriteLine( "The number of files in {0} is {1}", target, Directory::GetFiles( target )->Length );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "The process failed: {0}", e );
   }

}

The following code example demonstrates how to calculate the size of a directory.

Visual Basic
' The following example calculates the size of a directory
' and its subdirectories, if any, and displays the total size
' in bytes.
Imports System
Imports System.IO

Public Class ShowDirSize

    Public Shared Function DirSize(ByVal d As DirectoryInfo) As Long
        Dim Size As Long = 0
        ' Add file sizes.
        Dim fis As FileInfo() = d.GetFiles()
        Dim fi As FileInfo
        For Each fi In fis
            Size += fi.Length
        Next fi
        ' Add subdirectory sizes.
        Dim dis As DirectoryInfo() = d.GetDirectories()
        Dim di As DirectoryInfo
        For Each di In dis
            Size += DirSize(di)
        Next di
        Return Size
    End Function 'DirSize

    Public Shared Sub Main(ByVal args() As String)
        If args.Length <> 1 Then
            Console.WriteLine("You must provide a directory argument at the command line.")
        Else
            Dim d As New DirectoryInfo(args(0))
            Dim dsize As Long = DirSize(d)
            Console.WriteLine("The size of {0} and its subdirectories is {1} bytes.", d, dsize)
        End If
    End Sub 'Main
End Class 'ShowDirSize
C#
// The following example calculates the size of a directory
// and its subdirectories, if any, and displays the total size
// in bytes.

using System;
using System.IO;

public class ShowDirSize 
{
    public static long DirSize(DirectoryInfo d) 
    {    
        long Size = 0;    
        // Add file sizes.
        FileInfo[] fis = d.GetFiles();
        foreach (FileInfo fi in fis) 
        {      
            Size += fi.Length;    
        }
        // Add subdirectory sizes.
        DirectoryInfo[] dis = d.GetDirectories();
        foreach (DirectoryInfo di in dis) 
        {
            Size += DirSize(di);   
        }
        return(Size);  
    }
    public static void Main(string[] args) 
    {
        if (args.Length != 1) 
        {
            Console.WriteLine("You must provide a directory argument at the command line.");    
        } 
        else 
        {  
            DirectoryInfo d = new DirectoryInfo(args[0]);
            long dsize = DirSize(d);
            Console.WriteLine("The size of {0} and its subdirectories is {1} bytes.", d, dsize);
        }
    }
}
Visual C++
// The following example calculates the size of a directory
// and its subdirectories, if any, and displays the total size
// in bytes.
using namespace System;
using namespace System::IO;

public ref class ShowDirSize
{
public:
    static long DirSize( DirectoryInfo^ d )
    {
        long Size = 0;

        // Add file sizes.
        array<FileInfo^>^ fis = d->GetFiles();

        for each (FileInfo^ fi in fis)
        {
            Size += (long)fi->Length;
        }

        array<DirectoryInfo^>^ dis = d->GetDirectories();

        for each (DirectoryInfo^ di in dis)
        {
            Size += DirSize( di );
        }

        return Size;
    }

    static void Main( array<String^>^args )
    {
        if ( args->Length != 2 )
        {
            Console::WriteLine( "You must provide a directory argument at the command line." );
        }
        else
        {
            DirectoryInfo^ d = gcnew DirectoryInfo( args[ 1 ] );
            long dsize = DirSize(d);
            Console::WriteLine( "The size of {0} and its subdirectories is {1} bytes.", d, dsize );
       }
    }
};

int main()
{
   array<String^>^ args = Environment::GetCommandLineArgs();
   ShowDirSize::Main( args );
}

.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Tags What's this?: Add a tag
Community Content   What is Community Content?
Add new content RSS  Annotations
Directory,DirectoryInfo incorrect work with directories with space(s) in end of name (UNC issue)      aka wolf ... Thomas Lee   |   Edit   |   Show History
An example:

string disk = @"C:\";
foreach(string dir in Directory.GetDirectories(disk))
{
if(!dir.StartsWith(disk+"DirwithSpace")) continue;
Console.WriteLine("\"{0}\", DirectoryInfo Name: \"{1}\", FullName: \"{2}\"", dir, new DirectoryInfo(dir).Name, new DirectoryInfo(dir).FullName);
if(!Directory.Exists(dir)) {
Console.WriteLine("Directory doesn't exists: \"{0}\"", dir);
continue;
}
}
---
output
"C:\DirwithSpace ", DirectoryInfo Name: "DirwithSpace", FullName: "C:\DirwithSpace"
Directory doesn't exists: "C:\DirwithSpace "

How to make the directory name with spaces:
1. Using thirdparty shells (Explore trim the space in end of the directory name)

2. VBScript
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateFolder("\\?\c:\DirwithSpace ")

3. C++/C#
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static extern bool CreateDirectory(string lpPathName, IntPtr lpSecurityAttributes);
...
if (!CreateDirectory(@"\\?\C:\DirwithSpace ", IntPtr.Zero))
throw new Win32Exception();
$0 $0$0 $0
Tags What's this?: Add a tag
Flag as ContentBug
Directory/DirectoryInfo incorrect work with directories with space(s) in end of name (UNC issue)      aka wolf   |   Edit   |   Show History
The main issue is space in end of the directory name, which Directory/DirectoryInfo classes ignore. The all methods of the Directory/DirectoryInfo use the NormalizePath of the Path class where the spaces trimmed (path.TrimEnd(TrimEndChars), the next code generate the IllegalPath on UNC pathes (or PathTooLong when path longer than 260 chars)), it's properly because Explorer and WinApi methods don't allow in regular way make the directories with space(s) on end, but in practice it's quite antoher (any thirdparty shell explorer supporting UNC, or using UNC pathes methods allow make those directories). Do you have any idea how to work with directories with space(s) in end of name? (or possible know when NET Framework implement support UNC pathes? )
Tags What's this?: Add a tag
Flag as ContentBug
Processing
© 2012 Microsoft. All rights reserved. Terms of Use | Trademarks | Privacy Statement
Page view tracker