C#でファイルをコピーする方法について紹介します。
ファイルのコピーには、System.IO名前空間のFileInfoクラスのCopyToメソッドを使用するか、FileクラスのCopy静的メソッドを使用します。
目次
FileInfoクラスのCopyToメソッドでコピー
FileInfoクラスのCopyToメソッドの構文は次のようになります。
1 |
public void CopyTo (string destFileName); |
CopyToメソッドのパラメーターのdestFileNameにコピー先のパスを指定します。
FileInfo.CopyToメソッドの使用例
以下にCopyToメソッドの使用例を示します。
1 2 3 4 5 6 7 8 |
// ファイルパス string path = @"C:\Test\Source\BeforeCopy.txt"; // FileInfoのインスタンスを生成する FileInfo fileInfo = new FileInfo(path); // コピー先のファイル名(パス) string destFileName = @"C:\Test\Dest\AfterCopy.txt"; // ファイルをコピーする fileInfo.CopyTo(destFileName); |
上記の例では「C:\Test\Source」フォルダーにある「BeforeCopy.txt」ファイルを「C:\Test\Dest」フォルダーに「AfterCopy.txt」という名前でコピーしています。
CopyToメソッドではコピー先のフォルダーパス(ここでは「C:\Test\Dest」)が存在しない場合には「System.IO.FileNotFoundException: ‘パスの一部が見つかりません。’」という例外が発生します。
また、コピー先のファイルパス(ここでは「C:\Test\Dest\AfterCopy.txt」)が存在する場合には「System.IO.IOException: ‘既に存在するファイルを作成することはできません。’」という例外が発生します。
ファイルを上書きコピーする
FileInfoクラスのCopyToメソッドでは、コピー先のファイルパスのみを指定して実行すると、コピー先のフォルダーに同名のファイルが存在する場合に例外が発生しますが、パラメーターを指定することでファイルを上書きすることもできます。
FileInfoクラスのCopyToメソッドで、コピー先のファイルを上書きするかどうかを指定する場合の構文は、次のようになります。
1 |
public System.IO.FileInfo CopyTo (string destFileName, bool overwrite); |
CopyToメソッドの2つ目のパラメーターのoverwriteにコピー先のファイルが存在する場合に上書きするかどうかをtrueまたはfalseで指定します。trueを指定するとファイルが存在する場合に上書きします。falseを指定した場合は、2つ目のパラメーターを省略した場合と同様にファイルが存在する場合に例外が発生します。
コピー先のファイルを上書きする場合のFileInfo.CopyToメソッドの使用例
以下にコピー先のファイルを上書きする場合のCopyToメソッドの使用例を示します。
1 2 3 4 5 6 7 8 |
// ファイルパス string path = @"C:\Test\Source\BeforeCopy.txt"; // FileInfoのインスタンスを生成する FileInfo fileInfo = new FileInfo(path); // コピー先のファイル名(パス) string destFileName = @"C:\Test\Dest\AfterCopy.txt"; // ファイルをコピーする fileInfo.CopyTo(destFileName, true); |
FileクラスのCopy静的メソッドでコピー
FileクラスのCopy静的メソッドの構文は次のようになります。
1 2 |
// ファイルの上書き指定なし public static void Copy (string sourceFileName, string destFileName); |
1 2 |
// ファイルの上書き指定あり public static void Copy (string sourceFileName, string destFileName, bool overwrite); |
Copy静的メソッドの1つ目のパラメーターのsourceDirNameにはコピーするファイルのパスを指定します。2つ目のパラメーターのdestFileNameにはコピー先のファイルのパスを指定します。3つ目のパラメーターのoverwriteにはコピー先のファイルを上書きするかどうかを指定します。2つ目のパラメーターのdestFileNameと3つ目のパラメーターのoverwriteについては、FileInfoクラスのCopyToメソッド同じです。
File.Copy静的メソッドの使用例
以下にCopy静的メソッドの使用例を示します。
1 2 3 4 5 6 7 8 |
// コピーするファイル名(パス) string sourceDirName = @"C:\Test\Source\BeforeCopy.txt"; // コピー先のファイル名(パス) string destFileName = @"D:\Test\Dest\AfterCopy.txt"; // コピー先のファイルを上書きするかどうか bool overwrite = true; // ファイルをコピーする File.Copy(sourceDirName, destFileName, overwrite); |
FileクラスのCopy静的メソッドもFileInfoクラスのCopyToメソッド同様に、コピー先のフォルダーが存在しない場合には例外が発生します。
サンプルプログラム
Windowsフォームアプリケーションでのプログラムの実装例を記載します。
ユーザーインターフェース
フォームのインターフェースは次のようにします。
コピー元のファイルパスを指定するテキストボックス(textBox1)と、コピー先のファイルパスを指定するテキストボックス(textBox2)を配置します。
それぞれのテキストボックスにはファイルを参照するダイアログを表示するための「…」ボタンを配置します。
コピー元のファイルパスの横にはファイルを開くダイアログボックスを表示するボタン(button1)を配置し、コピー先のファイルパスの横には名前を付けて保存ダイアログボックスを表示するボタン(button2)を配置します。
ファイルのコピー処理は「button3」ボタンと「button4」ボタンで行います。
ソースコード
サンプルプログラムのフォームには次のようなソースコードを記述します。
1 |
サンプルの実行
作成したプログラムを実行します。
「C:\Work\SourceFile」フォルダーに「コピー元.txt」という名前のファイルを作成します。
コピー元するファイルのテキストボックスに「C:\Work\SourceFile\コピー元.txt」を入力するか「…」ボタンをクリックしてファイルを参照します。
コピー先のファイルのテキストボックスに「D:\Work\DestinationFile\コピー先.txt」を入力するか「…」ボタンをクリックしてファイルを参照します。
「button3」ボタンまたは「button4」ボタンをクリックします。
ファイルがコピーされてメッセージが表示されます。