2009-12-22 2 views
-1

, пожалуйста, просто ответьте на вопрос Другие пути не отвечают на этот вопрос.C# Получить специальную папку

позвольте мне начать снова. Как использовать этот класс, который расширяет внутреннюю среду .GetSpecialFolder?

Idon't хотят specialroots

root = Environment.GetFolderPath(Environment.SpecialFolder) 

, потому что я хочу использовать это для других целей Вместо .net.

например, как я могу позвонить (Избранное = 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(); 
} 
} 
+7

Использование interop для выполнения того, что .NET может отлично справляться самостоятельно? Это пахнет copypasta от программиста на C/C++, который просто перешел на .NET и не мог потрудиться, чтобы прочитать документы. Рефакторинг! – Aaronaught

+7

"например, как я могу позвонить (Избранное = 6) нажатием кнопки?" Мы хотим помочь, но не понимаем, что вы подразумеваете под этим. Это звучит так, как будто вы спрашиваете, как использовать класс «EnvironmentFolders» для определения местоположения папки «Избранное» текущего пользователя, когда пользователь нажимает кнопку. (В форме Windows? На странице ASP.NET? Не знаю.) Это сбивает с толку, потому что я думаю, что все три ответа объяснили это. Попробуйте перефразировать вопрос, чтобы мы знали, что вы хотите сделать. –

ответ

31

Edit: если вы унаследовали код, который вы показали нам и нужно использовать его по какой-то причине (вместо встроенного метода .NET, который, как представляется, сделать то же самое) , вы должны быть в состоянии использовать его как это:

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

Сказав это, Environment класс имеет публичный метод, который делает почти то же самое, GetFolderPath:

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

reflected code in .NET выглядит точно так же, как и код в вашем классе, за исключением того, что он добавляет две вещи: он проверяет, что значение параметра определено в перечислении (поскольку вы можете передать любое целое число в метод), и оно требует, чтобы вызывающий объект имел путь разрешение на открытие (новый FileIOPermission). Это последнее требование, с которым вы пытаетесь работать?

Оба метода статический, то есть доступ к ним через тип, который содержит их, а не экземпляр этого типа:

// Like this 
EnvironmentFolders.GetPath(...); 

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

Смотрите документацию .NET о Static Classes and Static Class Members для получения дополнительной информации.

+0

Ну, мне нужен этот класс. Я знаю, как позвонить (SpecialFolder). мой вопрос заключается в том, как использовать deze clas. спасибо за вход. –

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

Что-то вроде этого добавлено в событие нажатия кнопки.

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

Вам нужно больше информации?

ADDED ON EDIT: комментарии правы, метод статичный, этот способ должен работать (по крайней мере, он работал, когда я пытаюсь его использовать в консольном приложении).

+0

Вы правы, что, возможно, это основной вопрос Форм. (Хотя 'GetPath' является * статическим * методом в' EnvironmentFolders'.) –

Смежные вопросы