【C#】マイドキュメントやデスクトップなどの特殊フォルダのパスを取得する (Environment.GetFolderPath)

OSやユーザーごとに異なる「マイドキュメント」「デスクトップ」「AppData」などのパスをハードコーディング(C:\Users\Name\... と直接書くこと)するのは推奨されません。

代わりに Environment.GetFolderPath メソッドと Environment.SpecialFolder 列挙体を使用することで、実行環境に合わせた正しいパスを動的に取得できます。

目次

主要な特殊フォルダのパス取得

以下のコードでは、よく利用される標準フォルダのパスを取得して表示しています。

サンプルコード

using System;

public class Program
{
    public static void Main()
    {
        // 1. マイドキュメント (Documents)
        // ユーザーのドキュメント保存場所
        string myDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        Console.WriteLine($"ドキュメント : {myDocuments}");

        // 2. デスクトップ (Desktop)
        // デスクトップ画面のファイル保存場所
        string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        Console.WriteLine($"デスクトップ : {desktop}");

        // 3. ピクチャ (MyPictures)
        string myPictures = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
        Console.WriteLine($"ピクチャ     : {myPictures}");

        // 4. アプリケーションデータ (ApplicationData / Roaming)
        // 設定ファイルなどを保存する場所(Roaming: ユーザーが別のPCでログインしても同期される領域)
        string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        Console.WriteLine($"AppData      : {appData}");

        // 5. ローカルアプリケーションデータ (LocalApplicationData / Local)
        // キャッシュなど、同期したくない大きなデータを保存する場所
        string localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        Console.WriteLine($"LocalAppData : {localAppData}");

        // 6. システムフォルダ (System32)
        string system = Environment.GetFolderPath(Environment.SpecialFolder.System);
        Console.WriteLine($"System       : {system}");
    }
}

実行結果(Windows環境の例)

ドキュメント : C:\Users\UserName\Documents
デスクトップ : C:\Users\UserName\Desktop
ピクチャ     : C:\Users\UserName\Pictures
AppData      : C:\Users\UserName\AppData\Roaming
LocalAppData : C:\Users\UserName\AppData\Local
System       : C:\Windows\system32

解説と主要な SpecialFolder 列挙体

Environment.GetFolderPath の引数に渡す Environment.SpecialFolder 列挙体の代表的な値です。

列挙体の値取得されるパスの例 (Windows)用途
MyDocuments...\Documentsユーザー作成データの標準保存先。
Desktop...\Desktopデスクトップ上のファイル。
ApplicationData...\AppData\RoamingRoaming設定。ユーザーごとの設定ファイル(settings.xmlなど)はここに保存するのが作法です。
LocalApplicationData...\AppData\LocalLocal設定。一時ファイルやキャッシュ、巨大なデータなど、ローカルPCに留めるべきデータ用。
UserProfileC:\Users\UserNameユーザーのホームディレクトリ全体。
ProgramFilesC:\Program Files64bitアプリケーションのインストール先。

技術的なポイント

  1. クロスプラットフォーム対応.NET (Core) 以降では、WindowsだけでなくLinuxやmacOSでも適切なパス(例:/home/user/Documents)にマッピングされます。ただし、OSによっては存在しない概念(レジストリなど)のパスを取得しようとすると空文字が返る場合があります。
  2. パスの結合取得したパスの下に自作アプリ用のフォルダを作る場合は、必ず Path.Combine を使用してください。// 推奨される設定ファイルパスの作り方 var baseDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); var configPath = Path.Combine(baseDir, "MyAppName", "config.json");
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次