获取特殊文件夹

请回答问题,否则不回答这个问题。

让我重新开始。 我如何使用这个扩展内部Environment.GetSpecialFolder的类?

我不想要特别的

root = Environment.GetFolderPath(Environment.SpecialFolder) 

因为我想把它用于其他目的而不是.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); ///  /// Get an environment folder path for Windows environment folders ///  /// A string pointing to the special path ///  public static string GetPath(SpecialFolder folder) { StringBuilder lpszPath = new StringBuilder(260); SHGetFolderPath(IntPtr.Zero, (int)folder, IntPtr.Zero, 0, lpszPath); return lpszPath.ToString(); } } 

编辑:如果你inheritance了你向我们展示的代码并且由于某种原因需要使用它(而不是看起来做同样事情的内置.NET方法),你应该能够像这样使用它:

 string path = EnvironmentFolders.GetPath(EnvironmentFolders.SpecialFolders.Fonts); 

话虽如此, Environment类有一个公共方法,几乎​​完全相同, GetFolderPath

 string path = Environment.GetFolderPath(Environment.SpecialFolder.Favorites); 

.NET中反映的代码看起来与您类中的代码完全相同,只不过它增加了两件事:它validation参数值是在枚举中定义的(因为您可以将任何整数传递给方法)并且它要求调用者具有路径发现权限(新的FileIOPermission )。 这是你试图解决的最后一项要求吗?

这两种方法都是静态的 ,这意味着您可以通过包含它们的类型访问它们,而不是该类型的实例:

  // Like this EnvironmentFolders.GetPath(...); // Not this EnvironmentFolders folders = new EnvironmentFolders(); folders.GetPath(...); 

有关更多信息,请参阅有关静态类和静态类成员的.NET文档。

 string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.Favorites); 

这样的东西添加到按钮的click事件中。

 String path = EnvironmentFolders.GetPath(EnvironmentFolders.SpecialFolder.Favorites) //do something with the path. 

你需要更多信息?

添加编辑:注释是正确的方法是静态的这种方式应该工作(至少,它在我在控制台应用程序上尝试时工作)。