C#でファイルの相対パスはどこ基準?
例えばFile.OpenRead(filePath)
メソッドなどでファイルにアクセスするとき、filePathを相対パスで指定したとき、それはどこ基準なのでしょうか。
これは「アプリケーションの実行ファイルのパス」が基準になります。
一つコンソールアプリケーションを作成して確認してみます。
Visual StudioでコンソールアプリケーションをMyConsoleApp
という名前で作成します。
そのままビルドを実行します。
そうすると、ターゲットフレームワークなどの多少の違いはあると思いますがMyConsoleApp/MyConsoleApp/bin/Debug/netcoreapp3.0
フォルダの中にMyConsoleApp.exe
というアプリケーションの実行ファイルが生成されます。
このMyConsoleApp.exe
が相対パスの基準になります。
試してみましょう。
MyConsoleApp.exe
と同じフォルダに一つフォルダ(MyFolder)を作成し、その中にファイル(MyFile.txt)を作成します。
MyFile.txt
には「これはテストです!」と書いておきます。
それではこのファイルをコンソールアプリから読み込んでみます。
コンソールアプリのProgram.cs
ファイルを以下のように編集します。
using System; using System.IO; namespace MyConsoleApp { class Program { static void Main(string[] args) { var text = File.ReadAllText("MyFolder/MyFile.txt"); Console.WriteLine(text); } } }
File.ReadAllText
メソッドには相対パスでファイルを指定しています。
これを実行すると、以下のようにファイルの中身が出力されます。