C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でファイルを別のディレクトリにコピーする方法【File.Copyの使い方を解説】

C#でファイルをコピーするには、System.IO名前空間に用意されているFile.Copyメソッドを使用します。このメソッドは引数の指定方法が異なる2つのオーバーロードを持っており、用途に応じて使い分けることができます。

File.Copyメソッドの2つのオーバーロード

Copy(String, String)

既存のファイルを新しいパスへコピーします。コピー先に同じ名前のファイルが存在する場合はIOExceptionがスローされ、上書きはできません。

Copy(String, String, Boolean)

第3引数にbool値(overwrite)を指定できるバージョンです。trueを渡すと、同じ名前のファイルが存在する場合でも上書きしてコピーできます。

Directory.GetFilesメソッドについて

Directory.GetFilesは、指定した検索パターンに一致するすべてのファイル名(フルパスを含む)を文字列配列として返すメソッドです。第3引数にSearchOptionを指定することで、サブディレクトリまで再帰的に検索することも可能です。

実装例:フォルダ内の全ファイルを別フォルダへコピーする

以下のコードでは、ソースフォルダ内のすべてのファイルを取得し、宛先フォルダへコピーしています。コピー前後でフォルダの中身をコンソールに出力して確認できるようにしています。

static void Main (string[] args) {
   string rootPath = @"C:\Users\Koushik\Desktop\TestFolder\TestFolderMain1";

   var searchSourceFolder = Directory.GetFiles(rootPath, "*.*", SearchOption.TopDirectoryOnly);
   Console.WriteLine("-------------Source Folder-------------");
   foreach (string file in searchSourceFolder){
      Console.WriteLine(file);
   }

   string destinationFolder = @"C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\";

   var destinationFolderFiles = Directory.GetFiles(destinationFolder, "*.*", SearchOption.TopDirectoryOnly);
   Console.WriteLine("-------------Destination Folder Before Copying-------------");
   foreach (string file in destinationFolderFiles){
      Console.WriteLine(file);
   }

   string[] files = Directory.GetFiles(rootPath);

   foreach (string file in files){
      File.Copy(file, $"{destinationFolder}{ Path.GetFileName(file) }");
   }
   Console.WriteLine("-------------After Copying-------------");

   var destinationFolderAfterCopyingFiles = Directory.GetFiles(destinationFolder, "*.*", SearchOption.TopDirectoryOnly);

   foreach (string file in destinationFolderAfterCopyingFiles){
      Console.WriteLine(file);
   }
   Console.ReadLine ();
}

実行結果

-------------Source Folder-------------
C:\Users\Koushik\Desktop\TestFolder\TestFolderMain1\TestFolderMain1.txt
-------------Destination Folder Before Copying-------------
C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMain2.txt
-------------After Copying-------------
C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMain1.txt
C:\Users\Koushik\Desktop\TestFolder\TestFolderMain2\TestFolderMain2.txt

ポイント解説

  • Path.GetFileName(file)を使うことで、ソースファイルからファイル名だけを取り出し、宛先フォルダのパスと結合して新しいコピー先を作成しています。
  • この例では上書き不可のCopy(String, String)を使用しているため、同じ名前のファイルがすでに存在すると例外が発生します。上書きを許可したい場合はFile.Copy(file, destPath, true)のように第3引数にtrueを指定してください。
  • 実運用では、コピー先のディレクトリが存在するかDirectory.Existsで事前に確認したり、try-catchで例外処理を追加するとより安全なコードになります。
  1. Javaでディレクトリ内のjpgファイル一覧を取得する方法

    FilenameFilterインターフェースを使った方法Fileクラスのlist(FilenameFilter filter)メソッドは、現在のFileオブジェクトが表すパスに存在するすべてのファイルおよびディレクトリの名前をString配列として返します。ただし、返される配列には、指定したフィルター条件を満たすファイル名のみが含まれます。FilenameFilterは、次の単一のメソッドを持つJavaのインターフェースです。accept(File dir, String name)拡張子に基づいてファイル名を取得したい場合は、このインターフェースを実装したクラスを作成し、そのインスタンスをF

  2. SCPで「そのようなファイルまたはディレクトリはありません」エラーが発生する原因と解決方法

    SCP(Secure Copy Protocol)は、「Secure Shell(SSH)」プロトコルをベースとしたファイル転送プロトコルです。コンピュータ間でファイルをやり取りするための手段として広く利用されており、転送元と転送先の両方がリモートホストの場合もあれば、片方がローカルホスト・もう片方がリモートホストという構成もあります。しかし最近、SCPでファイルをコピーしようとした際に「そのようなファイルまたはディレクトリはありません(No Such File or Directory)」というエラーが表示されるという報告が多数寄せられています。この記事では、このエラーが発生する主な原因を解