【C#】WindowsFormsアプリ、外部ファイルをアプリ実行フォルダに自動コピー

テキストファイルを読み込んでラベルに表示するコードで確認しましょう

何をしたいか

デバッグ時だけでなく、アプリ配布時に作成した外部ファイルも同時に配布したい

実行ファイルができる場所

VisualStudioがここに実行プログラムを作成します
手でコピーしてもいいのですが、Git管理下にも入らないため、うまくソリューション管理できません

サンプル

デザイン

ラベルを1つフォームに作成します

外部ファイルの場所

読み込むテキストファイルは、ソリューションフォルダに作成しておきます

開発中の場所は、ソリューションフォルダ直下

コード

外部ファイルを読み込んでラベルに表示

 label1.Text = File.ReadAllText(@"..¥..¥Test.txt");

このコードでは、File.ReadAllTextメソッドを使用して、相対パスを指定してファイルを読み取ります。@"..¥..¥Test.txt"は相対パスで、..は親ディレクトリを示し、¥はディレクトリ区切り文字です。このコードは、現在の作業ディレクトリからさかのぼり、その親ディレクトリ内のTest.txtファイルを読み取ります。

このようにコードを書きたい

 label1.Text = File.ReadAllText("Test.txt");

このコードでは、相対パスを指定せずに"Test.txt"ファイルを読み取ろうとしています。この場合、ファイルは現在の作業ディレクトリ内に存在する必要があります。現在の作業ディレクトリは、プログラムが実行されている場所に依存します。

これらのコードの主な違いは、ファイルへのアクセス方法です。前者は相対パスを使用してファイルにアクセスし、ファイルが存在する場所からの相対的な位置を指定します。後者は現在の作業ディレクトリから直接ファイルにアクセスしようとします。したがって、どちらを使用するかは、ファイルがどこに存在するかと、コードが実行される環境に依存します。通常は、ファイルの位置を確認し、それに合った方法を選択する必要があります。

テキストファイルのプロパティを変更

これでビルド時にワーキングディレクトリ(実行ファイルが存在するフォルダ)にコピーされます

手順の解説