以下にDirecroryクラスの使用例を示します。
[VB.NET]
'フォルダの作成
'"C:/TEST"フォルダが存在しなくても"C:/TEST/SUBTEST"が作成される
System.IO.Directory.CreateDirectory("C:/TEST/SUBTEST")
'フォルダの内容の移動(名前の変更)
'"C:/TEST"の内容を"C:/TEST1/A"へ移動する
'移動先フォルダは存在してなく、移動元と同じドライブにあること
'移動先フォルダは移動元フォルダのサブフォルダではダメ
'"C:/TEST1"フォルダが存在していなければダメ
'属性も受け継がれる
System.IO.Directory.Move("C:/TEST", "C:/TEST1/A")
'フォルダの削除する
'"C:/TEST"を根こそぎ(サブフォルダ、ファイルも)削除する
'"C:/TEST"以下に読み取り専用ファイルがあるとエラーが出る
System.IO.Directory.Delete("C:/TEST", True)
'作成日時の取得(DateTime値で返される)
Console.WriteLine(System.IO.Directory.GetCreationTime("C:/TEST"))
'更新日時の取得(DateTime値で返される)
Console.WriteLine(System.IO.Directory.GetLastWriteTime("C:/TEST"))
'アクセス日時の取得(DateTime値で返される)
Console.WriteLine(System.IO.Directory.GetLastAccessTime("C:/TEST"))
'カレントディレクトリの取得
Console.WriteLine(System.IO.Directory.GetCurrentDirectory())
'このコンピュータの理論ドライブ名をすべて取得
Console.WriteLine(System.IO.Directory.GetLogicalDrives())
'ルートディレクトリの取得(下の例では"C:/")
'"C:/TEST"が存在している必要はない
Console.WriteLine(System.IO.Directory.GetDirectoryRoot("C:/TEST"))
'親ディレクトリの取得(下の例では"C:/TEST")
'"C:/TEST/A"が存在している必要はない
Console.WriteLine(System.IO.Directory.GetParent("C:/TEST/A"))
'カレントディレクトリの設定
System.IO.Directory.SetCurrentDirectory("C:/TEST")
'作成日時の設定(現在の時間にする)
System.IO.Directory.SetCreationTime("C:/TEST", DateTime.Now)
'更新日時の設定
System.IO.Directory.SetLastWriteTime("C:/TEST", DateTime.Now)
'アクセス日時の設定
System.IO.Directory.SetLastAccessTime("C:/TEST", DateTime.Now)
[C#] //フォルダの作成 //"C:/TEST"フォルダが存在しなくても"C:/TEST/SUBTEST"が作成される System.IO.Directory.CreateDirectory(@"C:/TEST/SUBTEST"); //フォルダの内容の移動(名前の変更) //"C:/TEST"の内容を"C:/TEST1/A"へ移動する //移動先フォルダは存在してなく、移動元と同じドライブにあること //移動先フォルダは移動元フォルダのサブフォルダではダメ //"C:/TEST1"フォルダが存在していなければダメ //属性も受け継がれる System.IO.Directory.Move(@"C:/TEST", @"C:/TEST1/A"); //フォルダの削除する //"C:/TEST"を根こそぎ(サブフォルダ、ファイルも)削除する //"C:/TEST"以下に読み取り専用ファイルがあるとエラーが出る System.IO.Directory.Delete(@"C:/TEST", true); //作成日時の取得(DateTime値で返される) Console.WriteLine(System.IO.Directory.GetCreationTime(@"C:/TEST")); //更新日時の取得(DateTime値で返される) Console.WriteLine(System.IO.Directory.GetLastWriteTime(@"C:/TEST")); //アクセス日時の取得(DateTime値で返される) Console.WriteLine(System.IO.Directory.GetLastAccessTime(@"C:/TEST")); //カレントディレクトリの取得 Console.WriteLine(System.IO.Directory.GetCurrentDirectory()); //このコンピュータの理論ドライブ名をすべて取得 Console.WriteLine(System.IO.Directory.GetLogicalDrives()); //ルートディレクトリの取得(下の例では"C:/") //"C:/TEST"が存在している必要はない Console.WriteLine(System.IO.Directory.GetDirectoryRoot(@"C:/TEST")); //親ディレクトリの取得(下の例では"C:/TEST") //"C:/TEST/A"が存在している必要はない Console.WriteLine(System.IO.Directory.GetParent(@"C:/TEST/A")); //カレントディレクトリの設定 System.IO.Directory.SetCurrentDirectory(@"C:/TEST"); //作成日時の設定(現在の時間にする) System.IO.Directory.SetCreationTime(@"C:/TEST", DateTime.Now); //更新日時の設定 System.IO.Directory.SetLastWriteTime(@"C:/TEST", DateTime.Now); //アクセス日時の設定 System.IO.Directory.SetLastAccessTime(@"C:/TEST", DateTime.Now);
Directoryクラスのメソッドを表にまとめてみました。
Directoryのメソッド | 説明 | 注意事項 |
---|---|---|
CreateDirectory | ディレクトリを作成する | 作成するディレクトリの親ディレクトリが存在しない時は、親ディレクトリも作成される。 |
Delete | ディレクトリを削除する | 2番目の引数にTrueを指定しない時は、空のディレクトリしか削除できない。 削除するディレクトリ自身や、その中にあるファイル、サブディレクトリに読み取り専用属性があると、エラーとなる。詳しくは、「読み取り専用ファイルがあるときでもフォルダを削除する」。 |
Move | ディレクトリを移動する | 移動先ディレクトリが存在してはいけない。 移動先のディレクトリは移動元のディレクトリと同じドライブ(ボリューム)でなければならない。 移動先のディレクトリが移動元のサブディレクトリではいけない。 移動先のディレクトリの親ディレクトリは存在していなければならない 移動後はファイル、ディレクトリの属性が受け継がれる。 |
GetCreationTime | ディレクトリの作成日時を取得する | |
GetCreationTimeUtc | 世界協定時刻(UTC)形式で、ディレクトリの作成日時を取得する | .NET Framework 1.1以降。 |
GetLastAccessTime | ディレクトリの最終アクセス日時を取得する | |
GetLastAccessTimeUtc | 世界協定時刻(UTC)形式で、ディレクトリの最終アクセス日時を取得する | .NET Framework 1.1以降。 |
GetLastWriteTime | ディレクトリの最終更新日時を取得する | |
GetLastWriteTimeUtc | 世界協定時刻(UTC)形式で、ディレクトリの最終更新日時を取得する | .NET Framework 1.1以降。 |
SetCreationTime | ディレクトリの作成日時を設定する | |
SetCreationTimeUtc | 世界協定時刻(UTC)形式で、ディレクトリの作成日時を設定する | .NET Framework 1.1以降。 |
SetLastAccessTime | ディレクトリの最終アクセス日時を設定する | |
SetLastAccessTimeUtc | 世界協定時刻(UTC)形式で、ディレクトリの最終アクセス日時を設定する | .NET Framework 1.1以降。 |
SetLastWriteTime | ディレクトリの最終更新日時を設定する | |
SetLastWriteTimeUtc | 世界協定時刻(UTC)形式で、ディレクトリの最終更新日時を設定する | .NET Framework 1.1以降。 |
GetCurrentDirectory | カレントディレクトリを取得する | |
GetDirectoryRoot | ボリューム情報やルート情報を取得する | ディレクトリが存在している必要はない。 |
GetParent | 親ディレクトリを取得する | ディレクトリが存在している必要はない。 |
GetDirectories | ディレクトリ内のサブディレクトリを取得する | .NET Framework 1.1以前では、サブディレクトリ内のディレクトリは検索しない。.NET Framework 2.0以降では、SearchOption.AllDirectoriesを指定することにより可能。 |
GetFiles | ディレクトリ内のファイルを取得する | .NET Framework 1.1以前では、サブディレクトリ内のディレクトリは検索しない。.NET Framework 2.0以降では、SearchOption.AllDirectoriesを指定することにより可能。 |
GetFileSystemEntries | ディレクトリ内のファイルとディレクトリを取得する | サブディレクトリ内のファイルとディレクトリは検索しない |
Exists | ディレクトリが存在するか調べる |
フォルダをコピーする方法は、「フォルダをコピーする」で説明します。
.NET Framework 2.0以降で、My.Computer.FileSystemを使用する方法
.NET Framework 2.0以降のVB.NETでは、My.Computer.FileSystemを使用して同様のことができます。(ただし、一部のメソッドは大きく異なります。)
前述したDirecroryクラスと同様の機能のMy.Computer.FileSystemのメンバ(CurrentDirectoryのみプロパティでそれ以外はメソッド)を以下に表にして紹介します。
メンバ名 | 対応するDirecroryクラスのメソッド | 説明 |
---|---|---|
CurrentDirectory | GetCurrentDirectoryとSetCurrentDirectory | カレントディレクトリを取得、設定する。 |
CopyDirectory | (なし) | ディレクトリをコピーする。詳しくは、こちら。 |
CreateDirectory | CreateDirectory | ディレクトリを作成する。 |
DeleteDirectory | Delete (ただし、大きく異なる。詳しくは、こちら。) | ディレクトリを削除する。 |
DirectoryExists | Exists | ディレクトリが存在するか調べる。 |
GetDirectories | GetDirectories | ディレクトリ内のサブディレクトリを取得する。 |
GetDirectoryInfo | (なし、「new DirectoryInfo」と同じ) | DirectoryInfoオブジェクトを取得する。 |
GetFiles | GetFiles | ディレクトリ内のファイルを取得する。 |
MoveDirectory | Move (ただし、大きく異なる。詳しくは、こちら。) | ディレクトリを移動する。 |
RenameDirectory | Move | ディレクトリ名を変更する。 |
違うドライブにフォルダを移動させる
Direcrory.Moveメソッドは、移動先のフォルダは移動元のフォルダと同じドライブでなければならないなど多くの制限がありましたが、My.Computer.FileSystem.MoveDirectoryメソッドにはそのような制限がありません。しかも、エクスプローラでフォルダを移動したときのように、ダイアログによりコピーの進行状況を表示し、途中でユーザーがキャンセルすることもできます。
下の例では、フォルダ"C:/A"を"C:/B"に移動しています。ユーザーインターフェイスを表示するためにUIOption.AllDialogsを指定し(デフォルトでは表示されない)、ユーザーがキャンセルしても例外(IOException)をスローしないようにUICancelOption.DoNothingを指定しています(デフォルトでは、例外がスローされる)。
[VB.NET]
'ディレクトリ"C:/A"を"C:/B"に移動する
My.Computer.FileSystem.MoveDirectory("C:/A", "C:/B", _
FileIO.UIOption.AllDialogs, FileIO.UICancelOption.DoNothing)
[C#]
//参照にMicrosoft.VisualBasic.dllが追加されている必要がある
//ディレクトリ"C:/A"を"C:/B"に移動する
Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(
"C://A",
Microsoft.VisualBasic.FileIO.UIOption.AllDialogs,
Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin,
Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing);
- 履歴: