ディレクトリ(フォルダー)を移動(リネーム)する [C#]

C#でディレクトリ(フォルダー)を移動する方法について紹介します。
ディレクトリの移動には、System.IO名前空間のDirectoryInfoクラスのMoveToメソッドを使用するか、DirectoryクラスのMove静的メソッドを使用します。

DirectoryInfoクラスのMoveToメソッドで移動

DirectoryInfoクラスのMoveToメソッドの構文は次のようになります。

MoveToメソッドには引数のdestDirNameに移動後のパスを指定します。

DirectoryInfo.MoveToメソッドの使用例

以下にMoveToメソッドの使用例を示します。

上記の例では「C:\Test\Source」にあるDir1ディレクトリを「C:\Test\Dest」にDir2というディレクトリ名として移動しています。
MoveToメソッドでは移動先のパス(ここでは「C:\Test\Dest」)が存在しない場合には「System.IO.DirectoryNotFoundException: ‘パスの一部が見つかりません。’」という例外が発生します。
また、移動後のディレクトリパス(ここでは「C:\Test\Dest\Dir2」)が存在する場合には「System.IO.IOException: ‘既に存在するファイルを作成することはできません。’」という例外が発生します。
移動する前にはDirectoryInfo.Existsプロパティなどで移動先のディレクトリが存在するかどうかの確認をした方がよさそうです。
MoveToメソッドでは移動先に別のドライブ(ボリューム)を指定することができません。例えば上記の例で「C:\Test\Source\Dir1」を「D:\MoveDir\Dir」に移動しようとすると「System.IO.IOException: ‘ソースとターゲット パスは同一のルートを持たなければなりません。[移動] 操作はボリューム間で行えません。’」という例外が発生します。

別のドライブにディレクトリを移動する方法は以下の記事をご覧ください。

ディレクトリ(フォルダー)をコピーする [C#]
ディレクトリをコピーする方法を紹介します。 ディレクトリをコピー手段(クラスやメソッドなど)はc#に標準で用意されていません。(Direc...

DirectoryクラスのMove静的メソッドで移動

DirectoryクラスのMove静的メソッドの構文は次のようになります。

Move静的メソッドの第1引数のsourceDirNameには移動するディレクトリのパスを指定します。第2引数のdestDirNameには移動後のディレクトリのパスを指定します。destDirNameについては、DirectoryInfoクラスのMoveToメソッド同じです。

Directory.Move静的メソッドの使用例

以下にMove静的メソッドの使用例を示します。

引数のrecursiveを指定しない場合

DirectoryクラスのMove静的メソッドもDirectoryInfoクラスのMoveToメソッド同様、移動先のディレクトリが存在しない場合、移動後のディレクトリが存在する場合、別のドライブに移動しようとした時には例外が発生します。

ディレクトリ名のリネーム

DirectoryInfoクラスのMoveメソッド、DirectoryクラスのMove静的メソッドはディレクトリ名の変更にも使用します。移動対象のディレクトリの名称を同階層で変更することでディレクトリ名のリネームが行われます。
次の例ではDirectoryクラスのMove静的メソッドを使用してBeforeNameという名前のディレクトリをAfterNameという名前にリネームしています。

DirectoryInfoクラスのMoveメソッド、およびDirectoryクラスのMove静的メソッドはMove(移動)という名称ですが、実質的な処理としてはリネームを行っています。そのため、別のドライブ(ボリューム)に移動できないなどの制限があるのです。

サンプルプログラム

Windowsフォームアプリケーションでのプログラムの実装例を記載します。

ユーザーインターフェース

フォームのインターフェースは次のようにします。

ディレクトリ移動サンプルフォームデザイン

ソースコード

サンプルプログラムのフォームには次のようなソースコードを記述します。

サンプルの実行

作成したプログラムを実行します。

ディレクトリ移動サンプルフォーム

[button1]がDirectoryInfoクラスのMoveToメソッドのディレクトリを移動する処理を実行します。
[button2]がDirectoryクラスのMove静的メソッドのディレクトリを移動する処理を実行します。

CドライブにWork > SourceDirectory > 移動前の順にディレクトリを作成てから、CドライブにWork > DestinationDirectoryの順にディレクトリを作成します。

ディレクトリ移動用のフォルダーを作成

移動するディレクトリのテキストボックスに「C:\Work\SourceDirectory\移動前」を入力します。
移動後のディレクトリのテキストボックスに「C:\Work\DestinationDirectory\移動後」を入力します。

ディレクトリ移動サンプルフォームのパスを入力

[button1]をクリックします。

ディレクトリ移動結果のメッセージ

メッセージが表示され、移動前ディレクトリが移動後ディレクトリとして移動されます。

ディレクトリ移動結果

[button1]をクリックする前の状態にディレクトリを戻します。

ディレクトリ移動用のフォルダーを作成

[button2]をクリックします。

ディレクトリ移動結果のメッセージ

[button1]の時と同様に、移動前のディレクトリが移動後のディレクトリとして移動されました。

ディレクトリ移動結果