While developing Pkcs11Admin - multiplatform application written in C# - I was trying to figure out where to store log file so it can be easily reached by the user on all supported operating systems - Windows, Linux and Mac OS X.
To avoid hardcoding I wanted to use System.Environment.SpecialFolder
enumeration but I was not quite sure which member (ENM
) to choose because the documentation does not contain the actual paths.
So I have created simple test application which dumps these paths and executed it on Windows 8.1 with .NET Framework 4.5 (WIN
), on Ubuntu 14.04 LTS with Mono 3.2.8 (LIN
) and on Mac OS X 10.10.1 Yosemite with Mono 3.10.0 (OSX
).
Here are the results:
ENM: System.Environment.SpecialFolder.AdminTools
WIN: C:\Users\jariq\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.ApplicationData
WIN: C:\Users\jariq\AppData\Roaming
LIN: /home/jariq/.config
OSX: /Users/jariq/.config
ENM: System.Environment.SpecialFolder.CDBurning
WIN: C:\Users\jariq\AppData\Local\Microsoft\Windows\Burn\Burn
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonAdminTools
WIN: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonApplicationData
WIN: C:\ProgramData
LIN: /usr/share
OSX: /usr/share
ENM: System.Environment.SpecialFolder.CommonDesktopDirectory
WIN: C:\Users\Public\Desktop
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonDocuments
WIN: C:\Users\Public\Documents
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonMusic
WIN: C:\Users\Public\Music
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonOemLinks
WIN: empty
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonPictures
WIN: C:\Users\Public\Pictures
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonProgramFiles
WIN: C:\Program Files\Common Files
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonProgramFilesX86
WIN: C:\Program Files (x86)\Common Files
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonPrograms
WIN: C:\ProgramData\Microsoft\Windows\Start Menu\Programs
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonStartMenu
WIN: C:\ProgramData\Microsoft\Windows\Start Menu
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonStartup
WIN: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.CommonTemplates
WIN: C:\ProgramData\Microsoft\Windows\Templates
LIN: /usr/share/templates
OSX: /usr/share/templates
ENM: System.Environment.SpecialFolder.CommonVideos
WIN: C:\Users\Public\Videos
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.Cookies
WIN: C:\Users\jariq\AppData\Local\Microsoft\Windows\INetCookies
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.Desktop
WIN: C:\Users\jariq\Desktop
LIN: /home/jariq/Desktop
OSX: /Users/jariq/Desktop
ENM: System.Environment.SpecialFolder.DesktopDirectory
WIN: C:\Users\jariq\Desktop
LIN: /home/jariq/Desktop
OSX: /Users/jariq/Desktop
ENM: System.Environment.SpecialFolder.Favorites
WIN: C:\Users\jariq\Favorites
LIN: empty
OSX: /Users/jariq/Library/Favorites
ENM: System.Environment.SpecialFolder.Fonts
WIN: C:\WINDOWS\Fonts
LIN: /home/jariq/.fonts
OSX: /Users/jariq/Library/Fonts
ENM: System.Environment.SpecialFolder.History
WIN: C:\Users\jariq\AppData\Local\Microsoft\Windows\History
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.InternetCache
WIN: C:\Users\jariq\AppData\Local\Microsoft\Windows\INetCache
LIN: empty
OSX: /Users/jariq/Library/Caches
ENM: System.Environment.SpecialFolder.LocalApplicationData
WIN: C:\Users\jariq\AppData\Local
LIN: /home/jariq/.local/share
OSX: /Users/jariq/.local/share
ENM: System.Environment.SpecialFolder.LocalizedResources
WIN: empty
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.MyComputer
WIN: empty
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.MyDocuments
WIN: C:\Users\jariq\Documents
LIN: /home/jariq
OSX: /Users/jariq
ENM: System.Environment.SpecialFolder.MyMusic
WIN: C:\Users\jariq\Music
LIN: /home/jariq/Music
OSX: /Users/jariq/Music
ENM: System.Environment.SpecialFolder.MyPictures
WIN: C:\Users\jariq\Pictures
LIN: /home/jariq/Pictures
OSX: /Users/jariq/Pictures
ENM: System.Environment.SpecialFolder.MyVideos
WIN: C:\Users\jariq\Videos
LIN: /home/jariq/Videos
OSX: /Users/jariq/Videos
ENM: System.Environment.SpecialFolder.NetworkShortcuts
WIN: C:\Users\jariq\AppData\Roaming\Microsoft\Windows\Network Shortcuts
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.Personal
WIN: C:\Users\jariq\Documents
LIN: /home/jariq
OSX: /Users/jariq
ENM: System.Environment.SpecialFolder.PrinterShortcuts
WIN: C:\Users\jariq\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.ProgramFiles
WIN: C:\Program Files
LIN: empty
OSX: /Applications
ENM: System.Environment.SpecialFolder.ProgramFilesX86
WIN: C:\Program Files (x86)
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.Programs
WIN: C:\Users\jariq\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.Recent
WIN: C:\Users\jariq\AppData\Roaming\Microsoft\Windows\Recent
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.Resources
WIN: C:\WINDOWS\resources
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.SendTo
WIN: C:\Users\jariq\AppData\Roaming\Microsoft\Windows\SendTo
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.StartMenu
WIN: C:\Users\jariq\AppData\Roaming\Microsoft\Windows\Start Menu
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.Startup
WIN: C:\Users\jariq\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.System
WIN: C:\WINDOWS\system32
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.SystemX86
WIN: C:\WINDOWS\SysWOW64
LIN: empty
OSX: empty
ENM: System.Environment.SpecialFolder.Templates
WIN: C:\Users\jariq\AppData\Roaming\Microsoft\Windows\Templates
LIN: /home/jariq/Templates
OSX: /Users/jariq/Templates
ENM: System.Environment.SpecialFolder.UserProfile
WIN: C:\Users\jariq
LIN: /home/jariq
OSX: /Users/jariq
ENM: System.Environment.SpecialFolder.Windows
WIN: C:\WINDOWS
LIN: empty
OSX: empty
For now I have ended up using Environment.SpecialFolder.MyDocuments
member because it points to the directories which are easily accessible even by a casual user.