Directory クラス
ディレクトリやサブディレクトリを通じて、作成、移動、および列挙するための静的メソッドを公開します。
この型のすべてのメンバの一覧については、Directory メンバ を参照してください。
System.Object
System.IO.Directory
NotInheritable Public Class Directory
[C#]
public sealed class Directory
[C++]
public __gc __sealed class Directory
[JScript]
public class Directory
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
Directory クラスは、ディレクトリのコピー、移動、名前変更、作成、削除などの一般的な操作に使用します。 Directory クラスは、ディレクトリに対する作成、アクセス、および書き込み操作についての DateTime 情報の取得および設定にも使用できます。
Directory のメソッドはすべて静的であるため、1 つの操作を実行するだけであれば、 File のメソッドを使用する方が、対応する DirectoryInfo のインスタンス メソッドを使用するよりも効率的な場合があります。 Directory のメソッドのほとんどは、操作対象のディレクトリのパスを必要とします。
Directory クラスの静的メソッドは、すべてのメソッドでセキュリティ チェックを実行します。オブジェクトを何回か再利用する場合は、このようなセキュリティ チェックが必ずしも必要ではなくなるため、これらの静的メソッドの代わりに DirectoryInfo の対応するインスタンス メソッドを使用することを検討してください。
メモ 入力文字列としてパスを受け入れるメンバでは、そのパスが正しい書式である必要があります。それ以外の場合は、例外が発生します。たとえば、パスが絶対パスであっても空白で始まっている場合、そのパスはクラスのメソッドではトリムされません。このため、パスが正しい書式にならず、例外が発生します。同様に、1 つのパスまたは複数のパスの組み合わせを絶対パスとして 2 度指定することはできません。たとえば、"c:\temp c:\windows" でも、ほとんどの場合において例外が発生します。パス文字列を受け入れるメソッドを使用するときは、パスが適切な書式であることを確認します。
パスを受け入れるメンバでは、ファイルまたはディレクトリを参照するパスを指定できます。指定するパスは、相対パス、またはサーバーおよび共有名を示す UNC (Universal Naming Convention) パスにすることができます。たとえば、次に示すパスはすべて有効なパスです。
- C# では "c:\\MyDir"、Visual Basic では "c:\MyDir"。
- C# では "MyDir\\MySubdir"、Visual Basic では "MyDir\MySubDir"。
- C# では "\\\\MyServer\\MyShare"、Visual Basic では "\\MyServer\MyShare"。
既定では、すべてのユーザーに、新しいディレクトリに対する完全な読み書きアクセス権が与えられます。
このクラスの使用例については、以下の「使用例」を参照してください。その他の一般的な I/O タスクまたは関連する I/O タスクの例を次の表に示します。
実行するタスク | 参考例があるトピック |
---|---|
テキスト ファイルを作成する。 | ファイルへのテキストの書き込み |
テキスト ファイルに書き込む。 | ファイルへのテキストの書き込み |
テキスト ファイルから読み取る。 | ファイルからのテキストの読み取り |
ディレクトリをコピーする。 | Directory |
ディレクトリの名前を変更、またはディレクトリを移動する。 | Directory.Move |
ディレクトリを削除する。 | Directory.Delete |
ディレクトリを作成する。 | CreateDirectory |
サブディレクトリを作成する。 | CreateSubdirectory |
ディレクトリ内のファイルを参照する。 | Name |
ディレクトリ内のサブディレクトリを参照する。 | GetDirectories |
ディレクトリ内のすべてのサブディレクトリにあるすべてのファイルを参照する。 | GetFileSystemInfos |
ディレクトリのサイズを取得する。 | Directory |
ファイルが存在するかどうかを判別する。 | Exists |
ディレクトリ内のファイルをサイズ順に並べ替える。 | GetFileSystemInfos |
ディレクトリが存在するかどうかを判別する。 | Exists |
使用例
[Visual Basic, C#, C++] 指定したディレクトリが存在するかどうかを判断して、存在する場合はそれを削除し、存在しない場合はそれを作成する例を次に示します。この例では、この後にディレクトリを移動し、ディレクトリ内にファイルを作成し、ディレクトリ内のファイルの数をカウントします。
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
[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 {}
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;
void main() {
// Specify the directories you want to manipulate.
String* path = S"c:\\MyDir";
String* target = S"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, S"\\myfile.txt"));
// Count the files in the target directory.
Console::WriteLine(S"The number of files in {0} is {1}",
target, __box(Directory::GetFiles(target)->Length));
} catch (Exception* e) {
Console::WriteLine(S"The process failed: {0}", e);
}
}
[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
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
[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]);
Console.WriteLine("The size of {0} and its subdirectories is {1} bytes.", d, DirSize(d));
}
}
}
[C++]
// The following example calculates the size of a directory
// and its subdirectories, if any, and displays the total size
// in bytes.
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;
long DirSize(DirectoryInfo* d) {
long Size = 0;
// Add file sizes.
FileInfo* fis[] = d->GetFiles();
System::Collections::IEnumerator* myEnum = fis->GetEnumerator();
while (myEnum->MoveNext()) {
FileInfo* fi = __try_cast<FileInfo*>(myEnum->Current);
Size += (long)fi->Length;
}
// Add subdirectory sizes.
DirectoryInfo* dis[] = d->GetDirectories();
while (myEnum->MoveNext()) {
DirectoryInfo* di = __try_cast<DirectoryInfo*>(myEnum->Current);
Size += DirSize(di);
}
return Size;
}
int main() {
String* args[] = Environment::GetCommandLineArgs();
if (args->Length != 2) {
Console::WriteLine(S"You must provide a directory argument at the command line.");
} else {
DirectoryInfo* d = new DirectoryInfo(args[1]);
Console::WriteLine(S"The size of {0} and its subdirectories is {1} bytes.",
d, __box(DirSize(d)));
}
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.IO
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
アセンブリ: Mscorlib (Mscorlib.dll 内)
参照
Directory メンバ | System.IO 名前空間 | File | DirectoryInfo | FileInfo | 入出力操作 | ファイルからのテキストの読み取り | ファイルへのテキストの書き込み | 基本のファイル I/O | 新しく作成したデータ ファイルの読み取りと書き込み