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})");
}

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

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

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

検証環境

関連ページ