请回答问题, 否则不回答这个问题.
让我重新开始.我如何使用这个扩展内部Environment.GetSpecialFolder的类?
我不想要特别的根
root = Environment.GetFolderPath(Environment.SpecialFolder)
Run Code Online (Sandbox Code Playgroud)
因为我想将此用于其他目的而不是.net.
例如,如何通过单击按钮调用(Favorites = 6)位置?
public class EnvironmentFolders
{
public enum SpecialFolder
{
AdministrativeTools = 48,
//{user name}\Start Menu\Programs\Administrative Tools
ApplicationData = 26,
//{user name}\Application Data
CommonAdministrativeTools = 47,
//All Users\Start Menu\Programs\Administrative Tools
CommonApplicationData = 35,
//All Users\Application Data
CommonDesktopDirectory = 25,
//All Users\Desktop
CommonDocuments = 46,
//All Users\Documents
CommonFavorites = 31,
CommonNonLocalizedStartup = 30,
//non localized common startup
CommonPrograms = 23,
//All Users\Programs
CommonStartMenu = 22,
//All Users\Start Menu
CommonStartup = 24,
//All Users\Startup
CommonTemplates = 45,
//All Users\Templates
ControlPanel = 3,
//My Computer\Control Panel
Cookies = 33,
DesktopDirectory = 16,
//{user name}\Desktop
Favorites = 6,
//{user name}\Favorites
Fonts = 20,
//windows\fonts
History = 34,
InternetCache = 32,
LocalApplicationData = 28,
//{user name}\Local Settings\Application Data (non roaming)
MyDocuments = 5,
//My Documents
MyPictures = 39,
//C:\Program Files\My Pictures
NetworkShortcuts = 19,
//{user name}\nethood
NonLocalizedStartup = 29,
//non localized startup
Printers = 4,
//My Computer\Printers
PrintHood = 27,
//{user name}\PrintHood
ProgramFiles = 38,
//C:\Program Files
ProgramFilesCommon = 43,
//C:\Program Files\Common
Programs = 2,
//Start Menu\Programs
Recent = 8,
//{user name}\Recent
RecycleBin = 10,
//{desktop}\Recycle Bin
SendTo = 9,
//{user name}\SendTo
StartMenu = 11,
//{user name}\Start Menu
Startup = 7,
//Start Menu\Programs\Startup
System = 37,
//GetSystemDirectory()
Templates = 21,
UserProfile = 40,
//USERPROFILE
Windows = 36
//GetWindowsDirectory()
}
[DllImport("shfolder.dll", CharSet = CharSet.Auto)]
private static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath);
/// <summary>
/// Get an environment folder path for Windows environment folders
/// </summary>
/// <returns>A string pointing to the special path</returns>
/// <remarks></remarks>
public static string GetPath(SpecialFolder folder)
{
StringBuilder lpszPath = new StringBuilder(260);
SHGetFolderPath(IntPtr.Zero, (int)folder, IntPtr.Zero, 0, lpszPath);
return lpszPath.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
Jef*_*nal 39
编辑:如果你继承了你向我们展示的代码并且由于某种原因需要使用它(而不是看起来做同样事情的内置.NET方法),你应该能够像这样使用它:
string path = EnvironmentFolders.GetPath(EnvironmentFolders.SpecialFolders.Fonts);
Run Code Online (Sandbox Code Playgroud)
话虽如此,Environment该类有一个公共方法几乎完成相同的事情,GetFolderPath:
string path = Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
Run Code Online (Sandbox Code Playgroud)
在.NET中反映的代码看起来很像在你的类的代码,但它增加了两件事情:它验证参数值在枚举中定义(因为你可以传递给方法的任意整数),并要求调用方具有路径发现权限(新增FileIOPermission).是你试图解决的最后一个要求吗?
这两种方法都是静态的,这意味着您可以通过包含它们的类型访问它们,而不是该类型的实例:
// Like this
EnvironmentFolders.GetPath(...);
// Not this
EnvironmentFolders folders = new EnvironmentFolders();
folders.GetPath(...);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅有关静态类和静态类成员的.NET文档.
string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
Run Code Online (Sandbox Code Playgroud)