using System.Collections.Concurrent; using System.Collections.Generic; #nullable disable namespace Wabbajack.Common.IO { /// /// A collection of properties to retrieve specific file system paths for the current user. /// public static class KnownFolders { // ---- MEMBERS ------------------------------------------------------------------------------------------------ private static ConcurrentDictionary _knownFolderInstances; // ---- PROPERTIES --------------------------------------------------------------------------------------------- /// /// The per-user Account Pictures folder. Introduced in Windows 8. /// Defaults to "%APPDATA%\Microsoft\Windows\AccountPictures". /// public static KnownFolder AccountPictures => GetInstance(KnownFolderType.AccountPictures); /// /// The per-user Administrative Tools folder. /// Defaults to "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Administrative Tools". /// public static KnownFolder AdminTools => GetInstance(KnownFolderType.AdminTools); /// /// The per-user app desktop folder, used internally by .NET applications to perform cross-platform app /// functionality. Introduced in Windows 10. /// Defaults to "%LOCALAPPDATA%\Desktop". /// public static KnownFolder AppDataDesktop => GetInstance(KnownFolderType.AppDataDesktop); /// /// The per-user app documents folder, used internally by .NET applications to perform cross-platform app /// functionality. Introduced in Windows 10. /// Defaults to "%LOCALAPPDATA%\Documents". /// public static KnownFolder AppDataDocuments => GetInstance(KnownFolderType.AppDataDocuments); /// /// The per-user app favorites folder, used internally by .NET applications to perform cross-platform app /// functionality. Introduced in Windows 10. /// Defaults to "%LOCALAPPDATA%\Favorites". /// public static KnownFolder AppDataFavorites => GetInstance(KnownFolderType.AppDataFavorites); /// /// The per-user app program data folder, used internally by .NET applications to perform cross-platform app /// functionality. Introduced in Windows 10. /// Defaults to "%LOCALAPPDATA%\ProgramData". /// public static KnownFolder AppDataProgramData => GetInstance(KnownFolderType.AppDataProgramData); /// /// The per-user Application Shortcuts folder. Introduced in Windows 8. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows\Application Shortcuts". /// public static KnownFolder ApplicationShortcuts => GetInstance(KnownFolderType.ApplicationShortcuts); /// /// The per-user Camera Roll folder. Introduced in Windows 8.1. /// Defaults to ".%USERPROFILE%\Pictures\Camera Roll". /// public static KnownFolder CameraRoll => GetInstance(KnownFolderType.CameraRoll); /// /// The per-user Temporary Burn Folder. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows\Burn\Burn". /// public static KnownFolder CDBurning => GetInstance(KnownFolderType.CDBurning); /// /// The common Administrative Tools folder. /// Defaults to "%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Administrative Tools". /// public static KnownFolder CommonAdminTools => GetInstance(KnownFolderType.CommonAdminTools); /// /// The common OEM Links folder. /// Defaults to "%ALLUSERSPROFILE%\OEM Links". /// public static KnownFolder CommonOemLinks => GetInstance(KnownFolderType.CommonOemLinks); /// /// The common Programs folder. /// Defaults to "%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs". /// public static KnownFolder CommonPrograms => GetInstance(KnownFolderType.CommonPrograms); /// /// The common Start Menu folder. /// Defaults to "%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu". /// public static KnownFolder CommonStartMenu => GetInstance(KnownFolderType.CommonStartMenu); /// /// The common Startup folder. /// Defaults to "%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\StartUp". /// public static KnownFolder CommonStartup => GetInstance(KnownFolderType.CommonStartup); /// /// The common Templates folder. /// Defaults to "%ALLUSERSPROFILE%\Microsoft\Windows\Templates". /// public static KnownFolder CommonTemplates => GetInstance(KnownFolderType.CommonTemplates); /// /// The per-user Contacts folder. Introduced in Windows Vista. /// Defaults to "%USERPROFILE%\Contacts". /// public static KnownFolder Contacts => GetInstance(KnownFolderType.Contacts); /// /// The per-user Cookies folder. /// Defaults to "%APPDATA%\Microsoft\Windows\Cookies". /// public static KnownFolder Cookies => GetInstance(KnownFolderType.Cookies); /// /// The per-user Desktop folder. /// Defaults to "%USERPROFILE%\Desktop". /// public static KnownFolder Desktop => GetInstance(KnownFolderType.Desktop); /// /// The common DeviceMetadataStore folder. Introduced in Windows 7. /// Defaults to "%ALLUSERSPROFILE%\Microsoft\Windows\DeviceMetadataStore". /// public static KnownFolder DeviceMetadataStore => GetInstance(KnownFolderType.DeviceMetadataStore); /// /// The per-user Documents folder. /// Defaults to "%USERPROFILE%\Documents". /// public static KnownFolder Documents => GetInstance(KnownFolderType.Documents); /// /// The per-user Documents library. Introduced in Windows 7. /// Defaults to "%APPDATA%\Microsoft\Windows\Libraries\Documents.library-ms". /// public static KnownFolder DocumentsLibrary => GetInstance(KnownFolderType.DocumentsLibrary); /// /// The per-user localized Documents folder. /// Defaults to "%USERPROFILE%\Documents". /// public static KnownFolder DocumentsLocalized => GetInstance(KnownFolderType.DocumentsLocalized); /// /// The per-user Downloads folder. /// Defaults to "%USERPROFILE%\Downloads". /// public static KnownFolder Downloads => GetInstance(KnownFolderType.Downloads); /// /// The per-user localized Downloads folder. /// Defaults to "%USERPROFILE%\Downloads". /// public static KnownFolder DownloadsLocalized => GetInstance(KnownFolderType.DownloadsLocalized); /// /// The per-user Favorites folder. /// Defaults to "%USERPROFILE%\Favorites". /// public static KnownFolder Favorites => GetInstance(KnownFolderType.Favorites); /// /// The fixed Fonts folder. /// Points to "%WINDIR%\Fonts". /// public static KnownFolder Fonts => GetInstance(KnownFolderType.Fonts); /// /// The per-user GameExplorer folder. Introduced in Windows Vista. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows\GameExplorer". /// public static KnownFolder GameTasks => GetInstance(KnownFolderType.GameTasks); /// /// The per-user History folder. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows\History". /// public static KnownFolder History => GetInstance(KnownFolderType.History); /// /// The per-user ImplicitAppShortcuts folder. Introduced in Windows 7. /// Defaults to "%APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned\ImplicitAppShortcuts". /// public static KnownFolder ImplicitAppShortcuts => GetInstance(KnownFolderType.ImplicitAppShortcuts); /// /// The per-user Temporary Internet Files folder. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows\Temporary Internet Files". /// public static KnownFolder InternetCache => GetInstance(KnownFolderType.InternetCache); /// /// The per-user Libraries folder. Introduced in Windows 7. /// Defaults to "%APPDATA%\Microsoft\Windows\Libraries". /// public static KnownFolder Libraries => GetInstance(KnownFolderType.Libraries); /// /// The per-user Links folder. /// Defaults to "%USERPROFILE%\Links". /// public static KnownFolder Links => GetInstance(KnownFolderType.Links); /// /// The per-user Local folder. /// Defaults to "%LOCALAPPDATA%" ("%USERPROFILE%\AppData\Local")". /// public static KnownFolder LocalAppData => GetInstance(KnownFolderType.LocalAppData); /// /// The per-user LocalLow folder. /// Defaults to "%USERPROFILE%\AppData\LocalLow". /// public static KnownFolder LocalAppDataLow => GetInstance(KnownFolderType.LocalAppDataLow); /// /// The fixed LocalizedResourcesDir folder. /// Points to "%WINDIR%\resources\0409" (code page). /// public static KnownFolder LocalizedResourcesDir => GetInstance(KnownFolderType.LocalizedResourcesDir); /// /// The per-user Music folder. /// Defaults to "%USERPROFILE%\Music". /// public static KnownFolder Music => GetInstance(KnownFolderType.Music); /// /// The per-user Music library. Introduced in Windows 7. /// Defaults to "%APPDATA%\Microsoft\Windows\Libraries\Music.library-ms". /// public static KnownFolder MusicLibrary => GetInstance(KnownFolderType.MusicLibrary); /// /// The per-user localized Music folder. /// Defaults to "%USERPROFILE%\Music". /// public static KnownFolder MusicLocalized => GetInstance(KnownFolderType.MusicLocalized); /// /// The per-user Network Shortcuts folder. /// Defaults to "%APPDATA%\Microsoft\Windows\Network Shortcuts". /// public static KnownFolder NetHood => GetInstance(KnownFolderType.NetHood); /// /// The per-user 3D Objects folder. Introduced in Windows 10. /// Defaults to "%USERPROFILE%\3D Objects". /// public static KnownFolder Objects3D => GetInstance(KnownFolderType.Objects3D); /// /// The per-user Original Images folder. Introduced in Windows Vista. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows Photo Gallery\Original Images". /// public static KnownFolder OriginalImages => GetInstance(KnownFolderType.OriginalImages); /// /// The per-user Slide Shows folder. Introduced in Windows Vista. /// Defaults to "%USERPROFILE%\Pictures\Slide Shows". /// public static KnownFolder PhotoAlbums => GetInstance(KnownFolderType.PhotoAlbums); /// /// The per-user Pictures folder. /// Defaults to "%USERPROFILE%\Pictures". /// public static KnownFolder Pictures => GetInstance(KnownFolderType.Pictures); /// /// The per-user Pictures library. Introduced in Windows 7. /// Defaults to "%APPDATA%\Microsoft\Windows\Libraries\Pictures.library-ms". /// public static KnownFolder PicturesLibrary => GetInstance(KnownFolderType.PicturesLibrary); /// /// The per-user localized Pictures folder. /// Defaults to "%USERPROFILE%\Pictures". /// public static KnownFolder PicturesLocalized => GetInstance(KnownFolderType.PicturesLocalized); /// /// The per-user Playlists folder. /// Defaults to "%USERPROFILE%\Music\Playlists". /// public static KnownFolder Playlists => GetInstance(KnownFolderType.Playlists); /// /// The per-user Printer Shortcuts folder. /// Defaults to "%APPDATA%\Microsoft\Windows\Printer Shortcuts". /// public static KnownFolder PrintHood => GetInstance(KnownFolderType.PrintHood); /// /// The fixed user profile folder. /// Defaults to "%USERPROFILE%" ("%SYSTEMDRIVE%\USERS\%USERNAME%")". /// public static KnownFolder Profile => GetInstance(KnownFolderType.Profile); /// /// The fixed ProgramData folder. /// Points to "%ALLUSERSPROFILE%" ("%PROGRAMDATA%", "%SYSTEMDRIVE%\ProgramData"). /// public static KnownFolder ProgramData => GetInstance(KnownFolderType.ProgramData); /// /// The fixed Program Files folder. /// This is the same as the known folder in 32-bit applications or the /// known folder in 64-bit applications. /// Points to %SYSTEMDRIVE%\Program Files on a 32-bit operating system or in 64-bit applications on a 64-bit /// operating system and to %SYSTEMDRIVE%\Program Files (x86) in 32-bit applications on a 64-bit operating /// system. /// public static KnownFolder ProgramFiles => GetInstance(KnownFolderType.ProgramFiles); /// /// The fixed Program Files folder (64-bit forced). /// This known folder is unsupported in 32-bit applications. /// Points to %SYSTEMDRIVE%\Program Files. /// public static KnownFolder ProgramFilesX64 => GetInstance(KnownFolderType.ProgramFilesX64); /// /// The fixed Program Files folder (32-bit forced). /// This is the same as the known folder in 32-bit applications. /// Points to "%SYSTEMDRIVE%\Program Files" on a 32-bit operating system and to /// "%SYSTEMDRIVE%\Program Files (x86)" on a 64-bit operating system. /// public static KnownFolder ProgramFilesX86 => GetInstance(KnownFolderType.ProgramFilesX86); /// /// The fixed Common Files folder. /// This is the same as the known folder in 32-bit applications or the /// known folder in 64-bit applications. /// Points to" %PROGRAMFILES%\Common Files" on a 32-bit operating system or in 64-bit applications on /// a 64-bit operating system and to "%PROGRAMFILES(X86)%\Common Files" in 32-bit applications on a /// 64-bit operating system. /// public static KnownFolder ProgramFilesCommon => GetInstance(KnownFolderType.ProgramFilesCommon); /// /// The fixed Common Files folder (64-bit forced). /// This known folder is unsupported in 32-bit applications. /// Points to "%PROGRAMFILES%\Common Files". /// public static KnownFolder ProgramFilesCommonX64 => GetInstance(KnownFolderType.ProgramFilesCommonX64); /// /// The fixed Common Files folder (32-bit forced). /// This is the same as the known folder in 32-bit applications. /// Points to "%PROGRAMFILES%\Common Files" on a 32-bit operating system and to /// "%PROGRAMFILES(X86)%\Common Files" on a 64-bit operating system. /// public static KnownFolder ProgramFilesCommonX86 => GetInstance(KnownFolderType.ProgramFilesCommonX86); /// /// The per-user Programs folder. /// Defaults to "%APPDATA%\Microsoft\Windows\Start Menu\Programs". /// public static KnownFolder Programs => GetInstance(KnownFolderType.Programs); /// /// The fixed Public folder. Introduced in Windows Vista. /// Defaults to "%PUBLIC%" ("%SYSTEMDRIVE%\Users\Public)". /// public static KnownFolder Public => GetInstance(KnownFolderType.Public); /// /// The common Public Desktop folder. /// Defaults to "%PUBLIC%\Desktop". /// public static KnownFolder PublicDesktop => GetInstance(KnownFolderType.PublicDesktop); /// /// The common Public Documents folder. /// Defaults to "%PUBLIC%\Documents". /// public static KnownFolder PublicDocuments => GetInstance(KnownFolderType.PublicDocuments); /// /// The common Public Downloads folder. Introduced in Windows Vista. /// Defaults to "%PUBLIC%\Downloads". /// public static KnownFolder PublicDownloads => GetInstance(KnownFolderType.PublicDownloads); /// /// The common GameExplorer folder. Introduced in Windows Vista. /// Defaults to "%ALLUSERSPROFILE%\Microsoft\Windows\GameExplorer". /// public static KnownFolder PublicGameTasks => GetInstance(KnownFolderType.PublicGameTasks); /// /// The common Libraries folder. Introduced in Windows 7. /// Defaults to "%ALLUSERSPROFILE%\Microsoft\Windows\Libraries". /// public static KnownFolder PublicLibraries => GetInstance(KnownFolderType.PublicLibraries); /// /// The common Public Music folder. /// Defaults to "%PUBLIC%\Music". /// public static KnownFolder PublicMusic => GetInstance(KnownFolderType.PublicMusic); /// /// The common Public Pictures folder. /// Defaults to "%PUBLIC%\Pictures". /// public static KnownFolder PublicPictures => GetInstance(KnownFolderType.PublicPictures); /// /// The common Ringtones folder. Introduced in Windows 7. /// Defaults to "%ALLUSERSPROFILE%\Microsoft\Windows\Ringtones". /// public static KnownFolder PublicRingtones => GetInstance(KnownFolderType.PublicRingtones); /// /// The common Public Account Pictures folder. Introduced in Windows 8. /// Defaults to "%PUBLIC%\AccountPictures". /// public static KnownFolder PublicUserTiles => GetInstance(KnownFolderType.PublicUserTiles); /// /// The common Public Videos folder. /// Defaults to "%PUBLIC%\Videos". /// public static KnownFolder PublicVideos => GetInstance(KnownFolderType.PublicVideos); /// /// The per-user Quick Launch folder. /// Defaults to "%APPDATA%\Microsoft\Internet Explorer\Quick Launch". /// public static KnownFolder QuickLaunch => GetInstance(KnownFolderType.QuickLaunch); /// /// The per-user Recent Items folder. /// Defaults to "%APPDATA%\Microsoft\Windows\Recent". /// public static KnownFolder Recent => GetInstance(KnownFolderType.Recent); /// /// The common Recorded TV library. Introduced in Windows 7. /// Defaults to "%PUBLIC%\RecordedTV.library-ms". /// public static KnownFolder RecordedTVLibrary => GetInstance(KnownFolderType.RecordedTVLibrary); /// /// The fixed Resources folder. /// Points to "%WINDIR%\Resources". /// public static KnownFolder ResourceDir => GetInstance(KnownFolderType.ResourceDir); /// /// The per-user Ringtones folder. Introduced in Windows 7. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows\Ringtones". /// public static KnownFolder Ringtones => GetInstance(KnownFolderType.Ringtones); /// /// The per-user Roaming folder. /// Defaults to "%APPDATA%" ("%USERPROFILE%\AppData\Roaming"). /// public static KnownFolder RoamingAppData => GetInstance(KnownFolderType.RoamingAppData); /// /// The per-user RoamedTileImages folder. Introduced in Windows 8. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows\RoamedTileImages". /// public static KnownFolder RoamedTileImages => GetInstance(KnownFolderType.RoamedTileImages); /// /// The per-user RoamingTiles folder. Introduced in Windows 8. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows\RoamingTiles". /// public static KnownFolder RoamingTiles => GetInstance(KnownFolderType.RoamingTiles); /// /// The common Sample Music folder. /// Defaults to "%PUBLIC%\Music\Sample Music". /// public static KnownFolder SampleMusic => GetInstance(KnownFolderType.SampleMusic); /// /// The common Sample Pictures folder. /// Defaults to "%PUBLIC%\Pictures\Sample Pictures". /// public static KnownFolder SamplePictures => GetInstance(KnownFolderType.SamplePictures); /// /// The common Sample Playlists folder. Introduced in Windows Vista. /// Defaults to "%PUBLIC%\Music\Sample Playlists". /// public static KnownFolder SamplePlaylists => GetInstance(KnownFolderType.SamplePlaylists); /// /// The common Sample Videos folder. /// Defaults to "%PUBLIC%\Videos\Sample Videos". /// public static KnownFolder SampleVideos => GetInstance(KnownFolderType.SampleVideos); /// /// The per-user Saved Games folder. Introduced in Windows Vista. /// Defaults to "%USERPROFILE%\Saved Games". /// public static KnownFolder SavedGames => GetInstance(KnownFolderType.SavedGames); /// /// The per-user Searches folder. /// Defaults to "%USERPROFILE%\Searches". /// public static KnownFolder SavedSearches => GetInstance(KnownFolderType.SavedSearches); /// /// The per-user Screenshots folder. Introduced in Windows 8. /// Defaults to "%USERPROFILE%\Pictures\Screenshots". /// public static KnownFolder Screenshots => GetInstance(KnownFolderType.Screenshots); /// /// The per-user History folder. Introduced in Windows 8.1. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows\ConnectedSearch\History". /// public static KnownFolder SearchHistory => GetInstance(KnownFolderType.SearchHistory); /// /// The per-user Templates folder. Introduced in Windows 8.1. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows\ConnectedSearch\Templates". /// public static KnownFolder SearchTemplates => GetInstance(KnownFolderType.SearchTemplates); /// /// The per-user SendTo folder. /// Defaults to "%APPDATA%\Microsoft\Windows\SendTo". /// public static KnownFolder SendTo => GetInstance(KnownFolderType.SendTo); /// /// The common Gadgets folder. Introduced in Windows 7. /// Defaults to "%ProgramFiles%\Windows Sidebar\Gadgets". /// public static KnownFolder SidebarDefaultParts => GetInstance(KnownFolderType.SidebarDefaultParts); /// /// The per-user Gadgets folder. Introduced in Windows 7. /// Defaults to "%LOCALAPPDATA%\Microsoft\Windows Sidebar\Gadgets". /// public static KnownFolder SidebarParts => GetInstance(KnownFolderType.SidebarParts); /// /// The per-user OneDrive folder. Introduced in Windows 8.1. /// Defaults to "%USERPROFILE%\OneDrive". /// public static KnownFolder SkyDrive => GetInstance(KnownFolderType.SkyDrive); /// /// The per-user OneDrive Camera Roll folder. Introduced in Windows 8.1. /// Defaults to "%USERPROFILE%\OneDrive\Pictures\Camera Roll". /// public static KnownFolder SkyDriveCameraRoll => GetInstance(KnownFolderType.SkyDriveCameraRoll); /// /// The per-user OneDrive Documents folder. Introduced in Windows 8.1. /// Defaults to "%USERPROFILE%\OneDrive\Documents". /// public static KnownFolder SkyDriveDocuments => GetInstance(KnownFolderType.SkyDriveDocuments); /// /// The per-user OneDrive Pictures folder. Introduced in Windows 8.1. /// Defaults to "%USERPROFILE%\OneDrive\Pictures". /// public static KnownFolder SkyDrivePictures => GetInstance(KnownFolderType.SkyDrivePictures); /// /// The per-user Start Menu folder. /// Defaults to "%APPDATA%\Microsoft\Windows\Start Menu". /// public static KnownFolder StartMenu => GetInstance(KnownFolderType.StartMenu); /// /// The per-user Startup folder. /// Defaults to "%APPDATA%\Microsoft\Windows\Start Menu\Programs\StartUp". /// public static KnownFolder Startup => GetInstance(KnownFolderType.Startup); /// /// The fixed System32 folder. /// This is the same as the known folder in 32-bit applications. /// Points to "%WINDIR%\system32" on 32-bit operating systems or in 64-bit applications on a 64-bit /// operating system and to "%WINDIR%\syswow64" in 32-bit applications on a 64-bit operating system. /// public static KnownFolder System => GetInstance(KnownFolderType.System); /// /// The fixed System32 folder (32-bit forced). /// This is the same as the known folder in 32-bit applications. /// Points to "%WINDIR%\syswow64" in 64-bit applications or in 32-bit applications on a 64-bit /// operating system and to "%WINDIR%\system32" on 32-bit operating systems. /// public static KnownFolder SystemX86 => GetInstance(KnownFolderType.SystemX86); /// /// The per-user Templates folder. /// Defaults to "%APPDATA%\Microsoft\Windows\Templates". /// public static KnownFolder Templates => GetInstance(KnownFolderType.Templates); /// /// The per-user User Pinned folder. Introduced in Windows 7. /// Defaults to "%APPDATA%\Microsoft\Internet Explorer\Quick Launch\User Pinned". /// public static KnownFolder UserPinned => GetInstance(KnownFolderType.UserPinned); /// /// The fixed Users folder. Introduced in Windows Vista. /// Points to "%SYSTEMDRIVE%\Users". /// public static KnownFolder UserProfiles => GetInstance(KnownFolderType.UserProfiles); /// /// The per-user Programs folder. Introduced in Windows 7. /// Defaults to "%LOCALAPPDATA%\Programs.". /// public static KnownFolder UserProgramFiles => GetInstance(KnownFolderType.UserProgramFiles); /// /// The per-user common Programs folder. INtroduced in Windows 7. /// Defaults to "%LOCALAPPDATA%\Programs\Common". /// public static KnownFolder UserProgramFilesCommon => GetInstance(KnownFolderType.UserProgramFilesCommon); /// /// The per-user Videos folder. /// Defaults to "%USERPROFILE%\Videos". /// public static KnownFolder Videos => GetInstance(KnownFolderType.Videos); /// /// The per-user Videos library. Introduced in Windows 7. /// Defaults to "%APPDATA%\Microsoft\Windows\Libraries\Videos.library-ms". /// public static KnownFolder VideosLibrary => GetInstance(KnownFolderType.VideosLibrary); /// /// The per-user localized Videos folder. /// Defaults to "%USERPROFILE%\Videos". /// public static KnownFolder VideosLocalized => GetInstance(KnownFolderType.VideosLocalized); /// /// The fixed Windows folder. /// Points to "%WINDIR%". /// public static KnownFolder Windows => GetInstance(KnownFolderType.Windows); // ---- METHODS (PRIVATE) -------------------------------------------------------------------------------------- private static KnownFolder GetInstance(KnownFolderType type) { // Check if the caching directory exists yet. if (_knownFolderInstances == null) _knownFolderInstances = new ConcurrentDictionary(); // Get a KnownFolder instance out of the cache dictionary or create it when not cached yet. if (!_knownFolderInstances.TryGetValue(type, out KnownFolder knownFolder)) { knownFolder = new KnownFolder(type); if (_knownFolderInstances.TryAdd(type, knownFolder)) return knownFolder; return _knownFolderInstances[type]; } return knownFolder; } } }