よく知られたフォルダパスの取り方

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

今ログインしているユーザーのデスクトップとか、ユーザー共通のドキュメントフォルダとかを、パス文字列直打ちではない方法で取得したい。

やったこと

WinUI3アプリでは、下記のようにすればいろいろなパスが取れた。

foreach (Environment.SpecialFolder Value in Enum.GetValues(typeof(Environment.SpecialFolder)))
{
    try
    {
        string name = Enum.GetName(typeof(Environment.SpecialFolder), Value);
        Debug.WriteLine("{0}:{1}", name, Environment.GetFolderPath(Value));
    }
    catch (Exception ex) { Debug.WriteLine(ex.Message); }
}

Debug.WriteLine("---------------------------------");

foreach (KnownFolderId Value in Enum.GetValues(typeof(KnownFolderId)))
{
    try
    {
        string name = Enum.GetName(typeof(KnownFolderId), Value);
        Debug.Write(name + ":");
        StorageFolder picturesLibrary = await KnownFolders.GetFolderForUserAsync(null /* current user */, Value);
        Debug.WriteLine(picturesLibrary.Path);
    }
    catch (Exception ex) { Debug.WriteLine(ex.Message); }
}

実行結果

Desktop:C:\Users\UserName\Desktop
Programs:C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
MyDocuments:C:\Users\UserName\Documents
MyDocuments:C:\Users\UserName\Documents
Favorites:C:\Users\UserName\Favorites
Startup:C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
Recent:C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Recent
SendTo:C:\Users\UserName\AppData\Roaming\Microsoft\Windows\SendTo
StartMenu:C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu
MyMusic:C:\Users\UserName\Music
MyVideos:C:\Users\UserName\Videos
DesktopDirectory:C:\Users\UserName\Desktop
MyComputer:
NetworkShortcuts:C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Network Shortcuts
Fonts:C:\WINDOWS\Fonts
Templates:C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Templates
CommonStartMenu:C:\ProgramData\Microsoft\Windows\Start Menu
CommonPrograms:C:\ProgramData\Microsoft\Windows\Start Menu\Programs
CommonStartup:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
CommonDesktopDirectory:C:\Users\Public\Desktop
ApplicationData:C:\Users\UserName\AppData\Roaming
PrinterShortcuts:
LocalApplicationData:C:\Users\UserName\AppData\Local
InternetCache:C:\Users\UserName\AppData\Local\Microsoft\Windows\INetCache
Cookies:C:\Users\UserName\AppData\Local\Microsoft\Windows\INetCookies
History:C:\Users\UserName\AppData\Local\Microsoft\Windows\History
CommonApplicationData:C:\ProgramData
Windows:C:\WINDOWS
System:C:\WINDOWS\system32
ProgramFiles:C:\Program Files (x86)
MyPictures:C:\Users\UserName\Pictures
UserProfile:C:\Users\UserName
SystemX86:C:\WINDOWS\SysWOW64
ProgramFilesX86:C:\Program Files (x86)
CommonProgramFiles:C:\Program Files (x86)\Common Files
CommonProgramFilesX86:C:\Program Files (x86)\Common Files
CommonTemplates:C:\ProgramData\Microsoft\Windows\Templates
CommonDocuments:C:\Users\Public\Documents
CommonAdminTools:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
AdminTools:C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
CommonMusic:C:\Users\Public\Music
CommonPictures:C:\Users\Public\Pictures
CommonVideos:C:\Users\Public\Videos
Resources:C:\WINDOWS\resources
LocalizedResources:
CommonOemLinks:
CDBurning:C:\Users\UserName\AppData\Local\Microsoft\Windows\Burn\Burn
---------------------------------
C:\Users\UserName\Videos\Captures
CameraRoll:C:\Users\UserName\Pictures\Camera Roll
DocumentsLibrary:
HomeGroup:例外がスローされました: 'System.Runtime.InteropServices.COMException' (System.Private.CoreLib.dll の中)
ホームグループにアクセスできません。ホームグループが設定されていないか、ホームグループにエラーが発生している可能性があります。 (0x80270222)
MediaServerDevices:
MusicLibrary:
Objects3D:C:\Users\UserName\3D Objects
PicturesLibrary:
Playlists:C:\Users\UserName\Music\Playlists
RecordedCalls:C:\Users\UserName\Recorded Calls
RemovableDevices:
SavedPictures:C:\Users\UserName\Pictures\Saved Pictures
Screenshots:C:\Users\UserName\Pictures\Screenshots
VideosLibrary:
AllAppMods:C:\Users\UserName\AppMods
CurrentAppMods:例外がスローされました: 'System.IO.FileNotFoundException' (System.Private.CoreLib.dll の中)
指定されたファイルが見つかりません。 (0x80070002)

※いくつか、空文字だったり例外起きたりするものがある様子。(未調査)