• 也说c#获取windows特殊路径


    虽然是古老的问题,最近用到这个,查一下还不少东东呐

    一、使用Environment.SpecialFolder

    该方法最简单,直接使用即可,只是提供的特殊路径比较少。

    (1)使用方法:
    string path = Environment.GetFolderPath(Environment.SpecialFolder.Programs);

    (2)获取参数:

    foreach (Environment.SpecialFolder s in
                        Enum.GetValues(typeof(Environment.SpecialFolder)))
                    {
                        Console.WriteLine("{0} folder : {1}",
                            s, Environment.GetFolderPath(s));
                    }

    (3)输出参数列表:

    Desktop = C:\Documents and Settings\gmj\桌面
    Programs = C:\Documents and Settings\gmj\「开始」菜单\程序
    Personal = E:\我的文档
    Personal = E:\我的文档
    Favorites = C:\Documents and Settings\gmj\Favorites
    Startup = C:\Documents and Settings\gmj\「开始」菜单\程序\启动
    Recent = C:\Documents and Settings\gmj\Recent
    SendTo = C:\Documents and Settings\gmj\SendTo
    StartMenu = C:\Documents and Settings\gmj\「开始」菜单
    MyMusic = E:\我的文档\My Music
    DesktopDirectory = C:\Documents and Settings\gmj\桌面
    MyComputer =
    Templates = C:\Documents and Settings\gmj\Templates
    ApplicationData = C:\Documents and Settings\gmj\Application Data
    LocalApplicationData = C:\Documents and Settings\gmj\Local Settings\Application Data
    InternetCache = C:\Documents and Settings\gmj\Local Settings\Temporary Internet Files
    Cookies = C:\Documents and Settings\gmj\Cookies
    History = C:\Documents and Settings\gmj\Local Settings\History
    CommonApplicationData = C:\Documents and Settings\All Users\Application Data
    System = C:\WINDOWS\system32
    ProgramFiles = C:\Program Files
    MyPictures = E:\我的文档\My Pictures
    CommonProgramFiles = C:\Program Files\Common Files

    合计:23行

    二、使用Environment.GetEnvironmentVariable

    该方法可提供更多内容。

    (1)使用方法:

    string path = Environment.GetEnvironmentVariable("ALLUSERSPROFILE");

    (2)获取参数:

    foreach (DictionaryEntry de in Environment.GetEnvironmentVariables())
                    {
                        Console.WriteLine("  {0} = {1}", de.Key, de.Value);
                    }

    (3)输出参数列表:

    Path = D:\Program Files\Sun\OPhone SDK\tools;D:\Program Files\Sun\android-sdk-windows-1.5_r2\tools;D:\Program

    Files\Sun\SDK\jdk\bin;D:\Program Files\Sun\SDK\jdk\jre\bin;E:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\bin;C:\Program

    Files\Oracle\jre\1.1.8\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Intel\DMIX;C:\Program

    Files\Microsoft SQL Server\90\Tools\binn\;D:\Program Files\CodeSmith\v5.0\;D:\Program Files\Symantec\pcAnywhere\;C:\Program

    Files\Ixia\IxChariot;D:\Program Files\Sun\SDK\bin;
      TEMP = C:\DOCUME~1\gmj\LOCALS~1\Temp
      SESSIONNAME = Console
      PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
      USERDOMAIN = EVER62
      PROCESSOR_ARCHITECTURE = x86
      SystemDrive = C:
      APPDATA = C:\Documents and Settings\gmj\Application Data
      JSERV = E:\oracle\ora92/Apache/Jserv/conf
      windir = C:\WINDOWS
      _ACP_INCLUDE = D:\Program Files\Microsoft Visual Studio 8\VC\include;D:\Program Files\Microsoft Visual Studio 8

    \VC\atlmfc\include;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include;D:\Program Files\Microsoft Visual Studio 8

    \SDK\v2.0\include
      TMP = C:\DOCUME~1\gmj\LOCALS~1\Temp
      USERPROFILE = C:\Documents and Settings\gmj
      ProgramFiles = C:\Program Files
      FP_NO_HOST_CHECK = NO
      HOMEPATH = \Documents and Settings\gmj
      COMPUTERNAME = EVER62
      _ACP_PATH = D:\Program Files\Microsoft Visual Studio 8\VC\bin;D:\Program Files\Microsoft Visual Studio 8

    \VC\PlatformSDK\bin;D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\bin;D:\Program Files\Microsoft Visual Studio 8

    \Common7\tools;D:\Program Files\Microsoft Visual Studio 8\Common7\ide;C:\Program Files\HTML Help Workshop;D:\Program

    Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;D:\Program Files\Microsoft Visual

    Studio 8\;D:\Program Files\Microsoft Visual Studio 8\\SDK\v2.0\bin;C:\WINDOWS\SysWow64;D:\Program Files\Microsoft Visual Studio

    8\Team Tools\Static Analysis Tools\FxCop\;D:\Program Files\Sun\OPhone SDK\tools;D:\Program Files\Sun\android-sdk-windows-1.5_r2

    \tools;D:\Program Files\Sun\SDK\jdk\bin;D:\Program Files\Sun\SDK\jdk\jre\bin;E:\oracle\ora92\bin;C:\Program

    Files\Oracle\jre\1.3.1\bin;C:\Program Files\Oracle\jre\1.1.8\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32

    \Wbem;C:\Program Files\Intel\DMIX;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;D:\Program Files\CodeSmith\v5.0

    \;D:\Program Files\Symantec\pcAnywhere\;C:\Program Files\Ixia\IxChariot;D:\Program Files\Sun\SDK\bin;
      USERNAME = gmj
      NUMBER_OF_PROCESSORS = 2
      PROCESSOR_IDENTIFIER = x86 Family 6 Model 23 Stepping 6, GenuineIntel
      _ACP_LIB = D:\Program Files\Microsoft Visual Studio 8\VC\lib;D:\Program Files\Microsoft Visual Studio 8

    \VC\atlmfc\lib;D:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\lib\i386;D:\Program Files\Microsoft Visual Studio 8

    \VC\PlatformSDK\lib;D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;D:\Program Files\Microsoft Visual Studio 8

    \;D:\Program Files\Microsoft Visual Studio 8\lib
      WecVersionForRosebud.DA8 = 2
      SystemRoot = C:\WINDOWS
      ComSpec = C:\WINDOWS\system32\cmd.exe
      LOGONSERVER = http://www.cnblogs.com/xinyuxin912/***
      VS80COMNTOOLS = D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\
      _ACP_ATLPROV = D:\Program Files\Microsoft Visual Studio 8\VC\Bin\ATLProv.dll
      WV_GATEWAY_CFG = E:\oracle\ora92\Apache\modplsql\cfg\wdbsvr.app
      CommonProgramFiles = C:\Program Files\Common Files
      PROCESSOR_LEVEL = 6
      PROCESSOR_REVISION = 1706
      CLIENTNAME = Console
      ALLUSERSPROFILE = C:\Documents and Settings\All Users
      VS90COMNTOOLS = D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\
      OS = Windows_NT
      HOMEDRIVE = C:
    合计:37行

    三、调用shell32中的SHGetSpecialFolderPath

    需要引用"System.Runtime.InteropServices”命名空间。

    (1)使用方法:

    [DllImport("shell32.dll")]
    static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner,[Out] StringBuilder lpszPath, int nFolder, bool fCreate);

    const int CSIDL_PROGRAMS = 2;  // \Windows\Start Menu\Programs
    StringBuilder pathBuilder = new StringBuilder(260);
    SHGetSpecialFolderPath(IntPtr.Zero, pathBuilder, CSIDL_PROGRAMS, false);
    string path = pathBuilder.ToString(); // should now hold the path

    (2)参数列表:


    Here's the full list of CSIDL's from ShlObj.h

    const int CSIDL_DESKTOP                                         = 0x0000;               // <desktop>
    const int CSIDL_INTERNET                                        = 0x0001;               // Internet Explorer (icon on desktop)
    const int CSIDL_PROGRAMS                                          = 0x0002;             // Start Menu\Programs
    const int CSIDL_CONTROLS                                          = 0x0003;             // My Computer\Control Panel
    const int CSIDL_PRINTERS                                          = 0x0004;             // My Computer\Printers
    const int CSIDL_PERSONAL                                          = 0x0005;             // My Documents
    const int CSIDL_FAVORITES                                       = 0x0006;               // <user name>\Favorites
    const int CSIDL_STARTUP                                 = 0x0007;               // Start Menu\Programs\Startup
    const int CSIDL_RECENT                                    = 0x0008;             // <user name>\Recent
    const int CSIDL_SENDTO                                    = 0x0009;             // <user name>\SendTo
    const int CSIDL_BITBUCKET                                  = 0x000a;            // <desktop>\Recycle Bin
    const int CSIDL_STARTMENU                                  = 0x000b;            // <user name>\Start Menu
    const int CSIDL_MYDOCUMENTS                              = CSIDL_PERSONAL; //  Personal was just a silly name for My Documents
    const int CSIDL_MYMUSIC                                  = 0x000d;              // "My Music" folder
    const int CSIDL_MYVIDEO                                  = 0x000e;              // "My Videos" folder
    const int CSIDL_DESKTOPDIRECTORY                        = 0x0010;               // <user name>\Desktop
    const int CSIDL_DRIVES                                    = 0x0011;             // My Computer
    const int CSIDL_NETWORK                                  = 0x0012;              // Network Neighborhood (My Network Places)
    const int CSIDL_NETHOOD                                  = 0x0013;              // <user name>\nethood
    const int CSIDL_FONTS                                      = 0x0014;            // windows\fonts
    const int CSIDL_TEMPLATES                                  = 0x0015;
    const int CSIDL_COMMON_STARTMENU                        = 0x0016;               // All Users\Start Menu
    const int CSIDL_COMMON_PROGRAMS                  = 0x0017;              // All Users\Start Menu\Programs
    const int CSIDL_COMMON_STARTUP                    = 0x0018;             // All Users\Startup
    const int CSIDL_COMMON_DESKTOPDIRECTORY  = 0x0019;              // All Users\Desktop
    const int CSIDL_APPDATA                                  = 0x001a;              // <user name>\Application Data
    const int CSIDL_PRINTHOOD                                  = 0x001b;            // <user name>\PrintHood
    const int CSIDL_LOCAL_APPDATA                      = 0x001c;            // <user name>\Local Settings\Applicaiton Data (non roaming)
    const int CSIDL_ALTSTARTUP                                = 0x001d;             // non localized startup
    const int CSIDL_COMMON_ALTSTARTUP                  = 0x001e;            // non localized common startup
    const int CSIDL_COMMON_FAVORITES                        = 0x001f;
    const int CSIDL_INTERNET_CACHE                    = 0x0020;
    const int CSIDL_COOKIES                                  = 0x0021;
    const int CSIDL_HISTORY                                  = 0x0022;
    const int CSIDL_COMMON_APPDATA                    = 0x0023;             // All Users\Application Data
    const int CSIDL_WINDOWS                                  = 0x0024;              // GetWindowsDirectory()
    const int CSIDL_SYSTEM                                    = 0x0025;             // GetSystemDirectory()
    const int CSIDL_PROGRAM_FILES                      = 0x0026;            // C:\Program Files
    const int CSIDL_MYPICTURES                                = 0x0027;             // C:\Program Files\My Pictures
    const int CSIDL_PROFILE                                  = 0x0028;              // USERPROFILE
    const int CSIDL_SYSTEMX86                                  = 0x0029;            // x86 system directory on RISC
    const int CSIDL_PROGRAM_FILESX86                        = 0x002a;               // x86 C:\Program Files on RISC
    const int CSIDL_PROGRAM_FILES_COMMON            = 0x002b;               // C:\Program Files\Common
    const int CSIDL_PROGRAM_FILES_COMMONX86  = 0x002c;              // x86 Program Files\Common on RISC
    const int CSIDL_COMMON_TEMPLATES                        = 0x002d;               // All Users\Templates
    const int CSIDL_COMMON_DOCUMENTS                        = 0x002e;               // All Users\Documents
    const int CSIDL_COMMON_ADMINTOOLS                  = 0x002f;            // All Users\Start Menu\Programs\Administrative Tools
    const int CSIDL_ADMINTOOLS                                = 0x0030;             // <user name>\Start Menu\Programs\Administrative Tools
    const int CSIDL_CONNECTIONS                              = 0x0031;              // Network and Dial-up Connections
    const int CSIDL_COMMON_MUSIC                            = 0x0035;               // All Users\My Music
    const int CSIDL_COMMON_PICTURES                  = 0x0036;              // All Users\My Pictures
    const int CSIDL_COMMON_VIDEO                            = 0x0037;               // All Users\My Video
    const int CSIDL_RESOURCES                                  = 0x0038;            // Resource Direcotry
    const int CSIDL_RESOURCES_LOCALIZED              = 0x0039;              // Localized Resource Direcotry
    const int CSIDL_COMMON_OEM_LINKS                        = 0x003a;               // Links to All Users OEM specific apps
    const int CSIDL_CDBURN_AREA                              = 0x003b;              // USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning
    const int CSIDL_COMPUTERSNEARME                  = 0x003d;              // Computers Near Me (computered from Workgroup membership)
    const int CSIDL_FLAG_CREATE                              = 0x8000;              // combine with CSIDL_ value to force folder creation in SHGetFolderPath()
    const int CSIDL_FLAG_DONT_VERIFY                        = 0x4000;               // combine with CSIDL_ value to return an unverified folder path
    const int CSIDL_FLAG_DONT_UNEXPAND                = 0x2000;             // combine with CSIDL_ value to avoid unexpanding environment variables
    const int CSIDL_FLAG_NO_ALIAS                      = 0x1000;            // combine with CSIDL_ value to insure non-alias versions of the pidl
    const int CSIDL_FLAG_PER_USER_INIT                = 0x0800;             // combine with CSIDL_ value to indicate per-user init (eg. upgrade)


     四、期待.net4.0

    还没装.net4.0呢,好像已经扩展了SpecialFolder,比如我要获取 "C:\Documents and Settings\All Users\「开始」菜单\程序",则可以直接使用

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

     没实际验证过,如果您验证了帮我补充一下吧^_^

  • 相关阅读:
    也URL Rewriter
    一窝蜂的分类信息
    再思考:分类信息的前途
    Ajax的一个体验:Ajax.NET A free library for the Microsoft .NET Framework
    EonerCMS——做一个仿桌面系统的CMS(十三)
    关于IE6、7、8下实现盒阴影的几个注意点
    EonerCMS——做一个仿桌面系统的CMS(十附最新源码)
    EonerCMS——做一个仿桌面系统的CMS(十一)
    用cloudzoom做一个仿淘宝的宝贝放大镜查看功能
    剑走偏锋——用css制作一个三角形箭头
  • 原文地址:https://www.cnblogs.com/xinyuxin912/p/1728806.html
Copyright © 2020-2023  润新知