[C#] How to Get Paths of Special Folders like Documents and Desktop (Environment.GetFolderPath)

It is not recommended to hardcode paths like C:\Users\Name\... because they vary by OS and user. Instead, use the Environment.GetFolderPath method and the Environment.SpecialFolder enum. This allows you to dynamically retrieve the correct path for your execution environment.

目次

Getting Paths for Major Special Folders

The following code demonstrates how to retrieve and display the paths of commonly used standard folders.

Sample Code

using System;

public class Program
{
    public static void Main()
    {
        // 1. My Documents
        // Standard location for user documents
        string myDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        Console.WriteLine($"Documents : {myDocuments}");

        // 2. Desktop
        // Location for files saved on the desktop screen
        string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        Console.WriteLine($"Desktop   : {desktop}");

        // 3. My Pictures
        string myPictures = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
        Console.WriteLine($"Pictures  : {myPictures}");

        // 4. Application Data (Roaming)
        // Location for configuration files (Roaming: synchronized if the user logs into another PC)
        string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        Console.WriteLine($"AppData   : {appData}");

        // 5. Local Application Data (Local)
        // Location for local data like cache or large files that should not be synchronized
        string localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        Console.WriteLine($"LocalAppData : {localAppData}");

        // 6. System Folder (System32)
        string system = Environment.GetFolderPath(Environment.SpecialFolder.System);
        Console.WriteLine($"System    : {system}");
    }
}

Execution Result (Example in Windows)

Documents : C:\Users\UserName\Documents
Desktop   : C:\Users\UserName\Desktop
Pictures  : C:\Users\UserName\Pictures
AppData   : C:\Users\UserName\AppData\Roaming
LocalAppData : C:\Users\UserName\AppData\Local
System    : C:\Windows\system32

Explanation and Key SpecialFolder Enum Values

The following table shows representative values for the Environment.SpecialFolder enum used as arguments for Environment.GetFolderPath.

Enum ValueExample Path (Windows)Usage
MyDocuments…\DocumentsStandard storage for user-created data.
Desktop…\DesktopFiles located on the desktop.
ApplicationData…\AppData\RoamingRoaming settings. It is standard practice to save user-specific settings (like settings.xml) here.
LocalApplicationData…\AppData\LocalLocal settings. Used for temporary files, cache, or large data that should stay on the local PC.
UserProfileC:\Users\UserNameThe entire home directory of the user.
ProgramFilesC:\Program FilesInstallation path for 64-bit applications.

Technical Points

Cross-platform Support

In .NET (Core) and later versions, these values map to appropriate paths on Linux and macOS as well (e.g., /home/user/Documents). However, some paths may return an empty string if the concept does not exist on that specific OS (such as the registry).

Combining Paths

When creating a folder for your application under a retrieved path, always use Path.Combine.

// Recommended way to create a configuration file path
var baseDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
var configPath = Path.Combine(baseDir, "MyAppName", "config.json");
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

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

目次