shuhelohelo’s blog

Xamarin.Forms多めです.

C#でファイルの相対パスはどこ基準?

例えばFile.OpenRead(filePath)メソッドなどでファイルにアクセスするとき、filePathを相対パスで指定したとき、それはどこ基準なのでしょうか。

これは「アプリケーションの実行ファイルのパス」が基準になります。

一つコンソールアプリケーションを作成して確認してみます。

Visual StudioでコンソールアプリケーションをMyConsoleAppという名前で作成します。 そのままビルドを実行します。

そうすると、ターゲットフレームワークなどの多少の違いはあると思いますがMyConsoleApp/MyConsoleApp/bin/Debug/netcoreapp3.0フォルダの中にMyConsoleApp.exeというアプリケーションの実行ファイルが生成されます。

このMyConsoleApp.exe相対パスの基準になります。

試してみましょう。

MyConsoleApp.exeと同じフォルダに一つフォルダ(MyFolder)を作成し、その中にファイル(MyFile.txt)を作成します。

f:id:shuhelohelo:20190824131637p:plain

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メソッドには相対パスでファイルを指定しています。

これを実行すると、以下のようにファイルの中身が出力されます。

f:id:shuhelohelo:20190824132132p:plain