C# - ファイルをコピーする

ファイルをコピーをするには File.Copy メソッドを使用します。

ファイルをコピーする方法

File.Copy メソッドの引数に、コピーしたいファイル名 と コピー先のファイル名 を指定します。

ファイルの 上書き を防止したいとき

using System.IO;

File.Copy("コピー元のファイル名", "コピー後のファイル名");
ファイルの 上書き を許すとき
using System.IO;

File.Copy("コピー元のファイル名", "コピー後のファイル名", true);

ファイル名は変更せず、他の ディレクトリ(フォルダー) にコピーするとき

コピー先に ディレクトリ(フォルダー) のみの指定はできません。必ずファイル名も指定します。

"D:\test1\test.txt" を "D:\test2\test.txt" にコピーしたいとき、 コピー先のファイル名は "D:\test2\test.txt" とします。 "D:\test2\" と指定すると例外が発生し、 "D:\test2" と指定すると "test2" という名前のファイル名でコピーされます。

ファイルがあるか、確認する

ファイルがあるか確認するには、File.Exists メソッドを使用します。 詳細は次の記事を参照してください。

コピー先のフォルダ(ディレクトリ)があるか、確認する

フォルダがあるか確認するには、Directory.Exists メソッドを使用します。 詳細は次の記事を参照してください。

ファイルコピーのサンプルプログラム

using System;
using System.IO;

try
{
    File.Copy("D:\\test\\test.txt", "D:\\test\\test.copy.txt");
    Console.WriteLine($"コピーが完了しました。");
}
catch (UnauthorizedAccessException ex)
{
    Console.WriteLine($"必要なアクセス許可がありません。({ex.Message})");
}
catch (ArgumentNullException ex)
{
    Console.WriteLine($"ファイル名がnullです。({ex.Message})");
}
catch (ArgumentException ex)
{
    Console.WriteLine($"ファイル名の形式が正しくありません。({ex.Message})");
}
catch (PathTooLongException ex)
{
    Console.WriteLine($"ファイル名が長すぎます。({ex.Message})");
}
catch (DirectoryNotFoundException ex)
{
    Console.WriteLine($"パスが無効です。({ex.Message})");
}
catch (FileNotFoundException ex)
{
    Console.WriteLine($"コピー対象のファイルがありません。({ex.Message})");
}
catch (IOException ex)
{
    Console.WriteLine($"既にコピー先のファイルが存在するか、I/O エラーが発生しました。({ex.Message})");
}
catch (NotSupportedException ex)
{
    Console.WriteLine($"ファイル名の形式が正しくありません。({ex.Message})");
}
catch (Exception ex)
{
    Console.WriteLine($"予期せぬエラーが発生しました。({ex.Message})");
}

サンプルコードの実行前 エクスプローラー-ファイルコピー前 プロパティ-ファイルコピー前

サンプルコードの実行 実行結果

サンプルコードの実行後 エクスプローラー-ファイルコピー後 プロパティ-ファイルコピー後 更新日時・属性(読み取り専用・隠しファイル) は コピーされていますが、作成日時 や アクセス日時 は異なっています。

サンプルコードのダウンロード

サンプルコードの実行には Microsoft Visual Studio 2019 以上のバージョンが必要です。 2019以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。

検証環境

関連ページ