获取特殊文件夹

Pow*_*fet 2 c#

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

让我重新开始.我如何使用这个扩展内部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文档.


Pri*_*lia 8

string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
Run Code Online (Sandbox Code Playgroud)