いろいろな環境での SpecialFolder

参考: 特殊ディレクトリのパスを取得する - .NET Tips (VB.NET,C#...)

.net framework のみならず、mono で動かした場合に Environment.GetFolderPath(Environment.SpecialFolder) がどういったパス文字列を返してくるのかが気になった&情報が無いようなのでメモ。

特に mono については、環境次第で挙動が変わりうるので、参考までにどうぞ。

ハマったところ

当たり前ではあるが、ディレクトリによっては通常ユーザーでは書き込めないことがある点に注意。
例えば、root でない権限で走るコードにてうっかり CommonApplicationData を使ったりすると、パーミッション的に困ったことになる。

また、SpecialFolder.Personal と SpecialFolder.MyDocuments は同じ値*1になっているようだ。Enum.GetValues で列挙したら .Personal が二つ出てきて一瞬戸惑ってしまった。

使った環境と実装

一覧

System.Environment.GetFolderPath(Environment.SpecialFolder) が返す文字列を、環境ごとに調べて一覧表にしてみた。なお、(ユーザー名) の部分には、プロセスを実行しているユーザーの名前(ログイン名)が入るはずである。

SpecialFolder. Windows XP Mac OS X Ubuntu Linux
ApplicationData C:\Documents and Settings\(ユーザー名)\Application Data /Users/(ユーザー名)/.config /home/(ユーザー名)/.config
CommonApplicationData C:\Documents and Settings\All Users\Application Data /usr/share /usr/share
CommonProgramFiles C:\Program Files\Common Files    
Cookies C:\Documents and Settings\(ユーザー名)\Cookies    
DesktopDirectory C:\Documents and Settings\(ユーザー名)\デスクトップ /Users/(ユーザー名)/Desktop /home/(ユーザー名)/デスクトップ
Desktop C:\Documents and Settings\(ユーザー名)\デスクトップ /Users/(ユーザー名)/Desktop /home/(ユーザー名)/デスクトップ
Favorites C:\Documents and Settings\(ユーザー名)\Favorites    
History C:\Documents and Settings\(ユーザー名)\Local Settings\History    
Internet Files      
InternetCache C:\Documents and Settings\(ユーザー名)\Local Settings\Temporary    
LocalApplicationData C:\Documents and Settings\(ユーザー名)\Local Settings\Application Data /Users/(ユーザー名)/.local/share /home/(ユーザー名)/.local/share
MyComputer      
MyDocuments*2 C:\Documents and Settings\(ユーザー名)\My Documents /Users/(ユーザー名) /home/(ユーザー名)
MyMusic C:\Documents and Settings\(ユーザー名)\My Documents\My Music /Users/(ユーザー名)/Music /home/(ユーザー名)
MyPictures C:\Documents and Settings\(ユーザー名)\My Documents\My Pictures /Users/(ユーザー名)/Pictures /home/(ユーザー名)
Personal*3 C:\Documents and Settings\(ユーザー名)\My Documents /Users/(ユーザー名) /home/(ユーザー名)
ProgramFiles C:\Program Files    
Programs C:\Documents and Settings\(ユーザー名)\スタート メニュー\プログラム    
Recent C:\Documents and Settings\(ユーザー名)\Recent    
SendTo C:\Documents and Settings\(ユーザー名)\SendTo    
StartMenu C:\Documents and Settings\(ユーザー名)\スタート メニュー    
Startup C:\Documents and Settings\(ユーザー名)\スタート メニュー\プログラム\スタートアップ    
System C:\WINDOWS\system32    
Templates C:\Documents and Settings\(ユーザー名)\Templates    

*1:両方とも 5 である。

*2:== Personal

*3:== MyDocuments