Freigeben über


Directory-Klasse

Macht statische Methoden zum Erstellen, Verschieben und Auflisten in Verzeichnissen und Unterverzeichnissen verfügbar. Diese Klasse kann nicht geerbt werden.

Namespace: System.IO
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<ComVisibleAttribute(True)> _
Public NotInheritable Class Directory
'Usage
Auf die Member einer statischen Klassen wird direkt ohne Instanz der Klasse zugegriffen.
[ComVisibleAttribute(true)] 
public static class Directory
[ComVisibleAttribute(true)] 
public ref class Directory abstract sealed
/** @attribute ComVisibleAttribute(true) */ 
public final class Directory
ComVisibleAttribute(true) 
public final class Directory

Hinweise

Verwenden Sie die Directory-Klasse für typische Operationen, z. B. das Kopieren, Verschieben, Umbenennen, Erstellen und Löschen von Dateien. Sie können mithilfe der Directory-Klasse auch DateTime-Informationen in Bezug auf den Dateizugriff, die Dateierstellung sowie das Schreiben in Verzeichnisse abrufen und festlegen.

Da alle Directory-Methoden statisch sind, kann die Verwendung einer Directory-Methode effektiver als die Verwendung einer entsprechenden DirectoryInfo-Instanzmethode sein, wenn nur eine Aktion ausgeführt werden soll. Für die meisten Directory-Methoden ist der Pfad zum bearbeiteten Verzeichnis erforderlich.

Die statischen Methoden der Directory-Klasse führen Sicherheitsüberprüfungen für alle Methoden durch. Wenn Sie ein Objekt mehrmals wiederverwenden, verwenden Sie stattdessen die entsprechende Instanzmethode von DirectoryInfo, da die Sicherheitsüberprüfung nicht immer erforderlich ist.

Hinweis

Bei Membern, die einen Pfad als Eingabezeichenfolge akzeptieren, muss dieser Pfad wohlgeformt sein. Andernfalls wird eine Ausnahme ausgelöst. Wenn beispielsweise ein Pfad vollqualifiziert ist, aber mit einem Leerzeichen beginnt, wird der Pfad in Methoden der Klasse nicht gekürzt. Daher ist der Pad falsch formatiert, und es wird eine Ausnahme ausgelöst. Ebenso kann ein Pfad oder eine Kombination von Pfaden nicht zweimal vollqualifiziert werden. Auch "c:\temp c:\windows" löst beispielsweise in den meisten Fällen eine Ausnahme aus. Bei der Verwendung von Methoden, die eine Pfadzeichenfolge akzeptieren, müssen Sie sicherstellen, dass die Pfade wohlgeformt sind.

Bei Membern, die einen Pfad akzeptieren, kann der Pfad auf eine Datei oder nur auf ein Verzeichnis verweisen. Der angegebene Pfad kann auch auf einen relativen Pfad oder auf einen UNC-Pfad (Universal Naming Convention) für einen Server- und Freigabenamen verweisen. Beispielsweise sind alle folgenden Pfade zulässig:

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

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

  • "\\\\MyServer\\MyShare" in C# oder "\\MyServer\MyShare" in Visual Basic.

Standardmäßig wird allen Benutzern voller Lese- und Schreibzugriff für alle neuen Verzeichnisse gewährt. Das Anfordern einer Berechtigung für ein Verzeichnis, dessen Pfadzeichenfolge mit dem Verzeichnistrennzeichen endet, führt dazu, dass Berechtigungen für alle darin enthaltenen Unterverzeichnisse angefordert werden (beispielsweise "C:\Temp\"). Wenn die Berechtigungen nur für ein bestimmtes Verzeichnis erforderlich sind, muss die Zeichenfolge mit dem Zeichen "." enden (beispielsweise "C:\Temp\.").

In der folgenden Tabelle sind Beispiele für andere typische oder verwandte E/A-Aufgaben aufgeführt.

Aufgabe

Beispiel in diesem Thema

Erstellen einer Textdatei.

Gewusst wie: Schreiben von Text in eine Datei

Schreiben in eine Textdatei.

Gewusst wie: Schreiben von Text in eine Datei

Lesen aus einer Textdatei.

Gewusst wie: Lesen aus einer Textdatei

Umbenennen oder Verschieben eines Verzeichnisses.

Directory.Move

DirectoryInfo.MoveTo

Löschen eines Verzeichnisses.

Directory.Delete

DirectoryInfo.Delete

Erstellen eines Verzeichnisses.

CreateDirectory

Directory

Erstellen eines Unterverzeichnisses.

CreateSubdirectory

Anzeigen der Dateien in einem Verzeichnis.

Name

Anzeigen der Unterverzeichnisse in einem Verzeichnis.

GetDirectories

GetDirectories

Anzeigen aller Dateien in allen Unterverzeichnissen eines Verzeichnisses.

GetFileSystemInfos

Ermitteln der Größe eines Verzeichnisses.

Directory

Bestimmen, ob eine Datei vorhanden ist.

Exists

Sortieren von Dateien in einem Verzeichnis nach Größe.

GetFileSystemInfos

Bestimmen, ob ein Verzeichnis vorhanden ist.

Exists

Beispiel

Im folgenden Codebeispiel wird bestimmt, ob ein angegebenes Verzeichnis vorhanden ist. Wenn das Verzeichnis vorhanden ist, wird es gelöscht. Wenn das Verzeichnis nicht vorhanden ist, wird es erstellt. Anschließend wird das Verzeichnis verschoben, im Verzeichnis wird eine Datei erstellt, und die Dateien im Verzeichnis werden gezählt.

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 whethers 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
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 {}
    }
}
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 );
   }

}
import System.*;
import System.IO.*;

class Test
{
    public static void main(String[] args)
    {
        // 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,
                (Int32)Directory.GetFiles(target).length);
        }
        catch (System.Exception e) {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
        finally {
        }
    } //main
} //Test

Im folgenden Codebeispiel wird veranschaulicht, wie die Größe eines Verzeichnisses berechnet wird.

' 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
Imports Microsoft.VisualBasic



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 Overloads 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))
            Console.WriteLine("The size of {0} and its subdirectories is {1} bytes.", d, DirSize(d))
        End If
    End Sub 'Main
End Class 'ShowDirSize
// 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]);
            Console.WriteLine("The size of {0} and its subdirectories is {1} bytes.", d, DirSize(d));
        }
    }
}
// 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;
long DirSize( DirectoryInfo^ d )
{
   long Size = 0;
   
   // Add file sizes.
   array<FileInfo^>^fis = d->GetFiles();
   System::Collections::IEnumerator^ myEnum = fis->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      FileInfo^ fi = safe_cast<FileInfo^>(myEnum->Current);
      Size += (long)fi->Length;
   }

   array<DirectoryInfo^>^dis = d->GetDirectories();
   while ( myEnum->MoveNext() )
   {
      DirectoryInfo^ di = safe_cast<DirectoryInfo^>(myEnum->Current);
      Size += DirSize( di );
   }

   return Size;
}

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

Vererbungshierarchie

System.Object
  System.IO.Directory

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

Directory-Member
System.IO-Namespace
File
DirectoryInfo
FileInfo

Weitere Ressourcen

Datei- und Stream-E/A
Gewusst wie: Lesen aus einer Textdatei
Gewusst wie: Schreiben von Text in eine Datei
Grundlegende Datei-E/A
Gewusst wie: Lesen und Schreiben einer neu erstellten Datendatei