エンジニアの将来って?

現在7年目のCOBOL→Java→C#エンジニアが、将来への考えや勉強のアウトプット、たまに腎臓について書くブログです

【C#】ファイルをコピーするCopyメソッドについて解説します

こんにちは。たいら(@tairaengineer2)です。
この記事では、C#ファイルをコピーするCopyメソッドについて解説します。

スポンサーリンク

 

前提条件

この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。

www.tairax.com

Copyメソッドとは

Copyメソッドとは、Fileクラスにあり、ファイルをコピーすることができるメソッドです。
usingは

using System.IO;

を使います。

File.Copy Method
名前空間: System.IO

Assemblies: System.IO.FileSystem.dll, mscorlib.dll, netstandard.dll
既存のファイルを新しいファイルにコピーします。

File.Copy Method (System.IO) | Microsoft Docsから引用させて頂きました

Copyメソッドは、引数が異なるオーバーロードされたメソッドが2つあります。

メソッド 説明
Copy(String, String) 既存のファイルを新しいファイルにコピーします。
同じ名前のファイルを上書きできません。
Copy(String, String, Boolean) 既存のファイルを新しいファイルにコピーします。
同じ名前のファイルの上書きが許可されます。

それぞれ解説していきます。

引数が2つのCopyメソッド

既存のファイルを新しいファイルにコピーします。 同じ名前のファイルを上書きできません。

public static void Copy (string sourceFileName, string destFileName);

File.Copy Method (System.IO) | Microsoft Docsから引用させて頂きました

引数が2つのCopyメソッドには、

  1. コピーもとのファイルパス
  2. コピー先のファイルパス

を設定します。

f:id:Tairax:20190810110804p:plain

先ほど例に出したパスの前に【@】がついていますが、これは逐語的文字列というものです。

C# のキーワードを識別子として使用できるようにする。
コード要素のプレフィックスとして @ 文字を使用すると、その要素はC# のキーワードではなく、識別子としてコンパイラに解釈されます。

@ - C# リファレンス | Microsoft Docsから引用させて頂きました

実際にCopyメソッドを使って、ファイルをコピーしてみましょう。

解説で使うC#プログラムの概要

ファイルを用意して、コピーするのみのプログラムです。
コピーしたら、コンソール上に結果を表示します。
ただし、

  • コピー先のファイルがある場合
  • コピー先のファイルがない場合

の2パターンを作成します。

コンソールプロジェクトを作成するやり方は下の記事をご参考ください。

www.tairax.com

C#サンプルコード

using System;
using System.IO;

namespace ConsoleApp1
{
    /// <summary>
    /// 引数2つのCopyメソッドでファイルをコピーする
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // ファイルをコピーする(正常パターン)
            File.Copy(@"C:\work\コピー基.txt", @"C:\work\コピー先.txt");
            
            // ファイルのサイズを表示
            Console.WriteLine("ファイルをコピーが完了しました");

            // ファイルをコピーする(異常パターン)
            File.Copy(@"C:\work\コピー基.txt", @"C:\work\コピーエラー.txt");

            // ファイルのサイズを表示
            Console.WriteLine("ファイルをコピーが完了しました");
        }
    }
}

実行結果

実行する前に、コピーするファイルを確認します。

f:id:Tairax:20190810120112p:plain

2つ目のファイルコピーがエラーになるようにしています。

では、実行します。

f:id:Tairax:20190810123353p:plain

ファイルをコピーが完了しました

ハンドルされていない例外: System.IO.IOException: ファイル 'C:\work\コピーエラー.
txt' は既に存在します。
   場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   場所 System.IO.File.InternalCopy(String sourceFileName, String destFileName,
Boolean overwrite, Boolean checkHost)
   場所 System.IO.File.Copy(String sourceFileName, String destFileName)
   場所 ConsoleApp1.Program.Main(String[] args) 場所 C:\Users\○○○\source\re
pos\ConsoleApp1\ConsoleApp1\Program.cs:行 24
続行するには何かキーを押してください . . .

2つ目のファイルのコピーは、コピー先のファイルがあるために失敗していますね。
では、フォルダの中身を確認してみます。

f:id:Tairax:20190810123724p:plain

1つ目のコピーの【コピー先.txt】はコピーができていることが確認できました!

 

スポンサーリンク

 

引数が3つのCopyメソッド

既存のファイルを新しいファイルにコピーします。 同じ名前のファイルの上書きが許可されます。

public static void Copy (string sourceFileName, string destFileName, bool overwrite);

File.Copy Method (System.IO) | Microsoft Docsから引用させて頂きました

引数が3つのCopyメソッドには、

  1. コピーもとのファイルパス
  2. コピー先のファイルパス
  3. 上書きを許可するかどうか

を設定します。

f:id:Tairax:20190810124800p:plain

3つ目の引数の上書きを許可するかどうかの意味は下記になります。

true or false 説明
true 上書きを許可する
false 上書きを許可しない

先ほど例に出したパスの前に【@】がついていますが、これは逐語的文字列というものです。

C# のキーワードを識別子として使用できるようにする。
コード要素のプレフィックスとして @ 文字を使用すると、その要素はC# のキーワードではなく、識別子としてコンパイラに解釈されます。

@ - C# リファレンス | Microsoft Docsから引用させて頂きました

実際にCopyメソッドを使って、ファイルをコピーしてみましょう。

解説で使うC#プログラムの概要

ファイルを用意して、コピーするのみのプログラムです。
コピーしたら、コンソール上に結果を表示します。
ただし、

  • ファイルの上書きを許可
  • ファイルの上書きを許可しない

の2パターンを作成します。

コンソールプロジェクトを作成するやり方は下の記事をご参考ください。

www.tairax.com

C#サンプルコード

using System;
using System.IO;

namespace ConsoleApp1
{
    /// <summary>
    /// 引数3つのCopyメソッドでファイルをコピーする
    /// </summary>
    class Program
    {
        /// <summary>
        /// メイン
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // ファイルをコピーする(正常パターン)
            File.Copy(@"C:\work\コピー基.txt", @"C:\work\コピー先.txt", true);
            
            // ファイルのサイズを表示
            Console.WriteLine("ファイルをコピーが完了しました");

            // ファイルをコピーする(異常パターン)
            File.Copy(@"C:\work\コピー基.txt", @"C:\work\コピーエラー.txt", false);

            // ファイルのサイズを表示
            Console.WriteLine("ファイルをコピーが完了しました");
        }
    }
}

実行結果

実行する前に、コピーするファイルを確認します。

f:id:Tairax:20190810125905p:plain

中身を確認してみます。
まず、【コピー基.txt】を見ます。

f:id:Tairax:20190810131638p:plain

次に【コピー先.txt】を見ます。

f:id:Tairax:20190810131951p:plain

最後に【コピーエラー.txt】を見ます。

f:id:Tairax:20190810132606p:plain

では、実行します。

f:id:Tairax:20190810133125p:plain

ファイルをコピーが完了しました

ハンドルされていない例外: System.IO.IOException: ファイル 'C:\work\コピーエラー.
txt' は既に存在します。
   場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   場所 System.IO.File.InternalCopy(String sourceFileName, String destFileName,
Boolean overwrite, Boolean checkHost)
   場所 System.IO.File.Copy(String sourceFileName, String destFileName, Boolean
overwrite)
   場所 ConsoleApp1.Program.Main(String[] args) 場所 C:\Users\○○○\source\re
pos\ConsoleApp1\ConsoleApp1\Program.cs:行 24
続行するには何かキーを押してください . . .

1回目のファイルの上書きは成功していますが、2回目は失敗していますね!
では、それぞれのファイルの中身を確認します。

【コピー先.txt】を確認します。

f:id:Tairax:20190810133537p:plain

【コピー基.txt】の内容で上書きできていますね!

では、【コピーエラー.txt】を確認します。

f:id:Tairax:20190810134114p:plain

上書きされていないことが確認できました!

まとめ:Copyメソッドを使って、ファイルをコピーしてみよう

以上がCopyメソッドの解説です。
まとめなので、振り返りをしてみます。

usingは

using System.IO;
メソッド 説明
Copy(String, String) 既存のファイルを新しいファイルにコピーします。
同じ名前のファイルを上書きできません。
Copy(String, String, Boolean) 既存のファイルを新しいファイルにコピーします。
同じ名前のファイルの上書きが許可されます。

あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ

 

ほかにもC#解説記事を書いてます。
よければご参考ください。

【C#】ファイルサイズを取得するLengthメソッドについて解説します

【C#】ファイルの存在チェックをするFile.Existsメソッドを解説します

【C#】ファイルを削除する、Deleteメソッドを解説します

 

今までブログで書いたC#の解説記事のまとめは、こちらをご参考ください。

【C#】ブログで書いた文法記事のまとめ