C#でディレクトリの内容を丸ごとコピーする方法(サブフォルダ・ファイルも含む)
ディレクトリの内容全体をコピーする場合、最も重要なのはサブディレクトリ(サブフォルダ)やその中に関連するファイルも含めて確実にコピーすることです。C#ではDirectoryInfoクラスと再帰処理を組み合わせることで、これをシンプルに実現できます。
例:コピー元とコピー先の準備
まず、以下のようにサブディレクトリとファイルを含むデモ用のソースディレクトリ(コピー元)を想定します。

一方、コピー先(ターゲット)となるディレクトリは、初期状態では空であるとします。

サンプルコード
以下のコードでは、CopyAllメソッドを定義し、ファイルのコピーとサブディレクトリの再帰的なコピーを行っています。
using System;
using System.IO;
namespace DemoApplication {
class Program {
public static void Main() {
string sourceDirectory = @"d:\DemoSourceDirectory";
string targetDirectory = @"d:\DemoTargetDirectory";
DirectoryInfo sourceDircetory = new DirectoryInfo(sourceDirectory);
DirectoryInfo targetDircetory = new DirectoryInfo(targetDirectory);
CopyAll(sourceDircetory, targetDircetory);
Console.ReadLine();
}
public static void CopyAll(DirectoryInfo source, DirectoryInfo target) {
Directory.CreateDirectory(target.FullName);
foreach (FileInfo fi in source.GetFiles()) {
Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name);
fi.CopyTo(Path.Combine(target.FullName, fi.Name), true);
}
foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) {
DirectoryInfo nextTargetSubDir =
target.CreateSubdirectory(diSourceSubDir.Name);
CopyAll(diSourceSubDir, nextTargetSubDir);
}
}
}
}
コードのポイント
- Directory.CreateDirectory(target.FullName):コピー先のディレクトリが存在しない場合は自動的に作成されます。既に存在していてもエラーにはなりません。
- GetFiles() と CopyTo():コピー元ディレクトリ直下のすべてのファイルを取得し、第2引数に
trueを指定することで同名ファイルが存在しても上書きコピーします。 - GetDirectories() と CreateSubdirectory():各サブディレクトリに対して同じ名前のフォルダを作成し、
CopyAllを再帰的に呼び出すことで、階層構造ごと丸ごとコピーできます。
実行結果
上記のコードを実行すると、コンソールにはコピー中のファイルパスが順に出力され、コピー先ディレクトリには元のフォルダ構造とファイルがそのまま複製されます。


-
HTMLでリンクのターゲット(開き先)を変更する方法【target属性の使い方】
HTMLでリンクのターゲット(開き先)を変更するには、<a>〜</a>タグのtarget属性を使用します。target属性を指定することで、リンク先を新しいタブで開いたり、同じタブで開いたりと、ページの表示方法を柔軟に制御できます。 target属性に指定できる値 属性値説明 _blankリンク先のページを新しいタブで開きます。 _selfリンク先のページを現在のタブ(同じフレーム)で開きます。省略時のデフォルト値です。 _parentリンク先のページを親フレームで開きます。 _topリンク先のページを最上位のフレームで開きます。フレーム構成を解除して全画面表示
-
Tkinterでテキストボックスの内容を読み込み・保存する方法
Tkinterアプリケーションでテキストボックス(Textウィジェット)の内容をファイルに保存したり、逆にファイルから読み込んで表示したりする方法を解説します。以下の手順に従って実装できます。 実装の流れ tkinterフレームのインスタンスを作成します。 win.geometry メソッドを使ってウィンドウのサイズを設定します。 ユーザー定義メソッド open_text を定義し、テキストファイルを 「読み取りモード」 で開きます。ファイルの内容を変数 content に格納した後、insert メソッドを使ってその内容をテキストボックスに挿入します。 次に、もう一つのユーザー定義メソッド