想用C#得到The All Users Desktop(Public\Desktop)的路徑。
原來以為很簡單,然而
Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
只能得到當前用戶的桌面路徑。到最后,沒有辦法,只能調用C++的函數:
[DllImport("shfolder.dll", CharSet = CharSet.Auto)] private static extern int SHGetFolderPath ( IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath ); private const int MAX_PATH = 260; private const int CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019; public static string GetAllUsersDesktopFolderPath ( ) { StringBuilder sbPath = new StringBuilder(MAX_PATH); SHGetFolderPath(IntPtr.Zero, CSIDL_COMMON_DESKTOPDIRECTORY, IntPtr.Zero, 0, sbPath); return sbPath.ToString(); }
獲取DLL的目錄
Assembly myAssembly = Assembly.GetEntryAssembly(); string path = myAssembly.Location; DirectoryInfo dr = new DirectoryInfo(path); path=dr.Parent; //當前目錄的上一級目錄
C#獲取程序當前路徑的方法
System.Environment.CurrentDirectory; //例: c:\test Application.ExecutablePath;(包括名稱) //例: c:\test\myapp.exe Application.StartupPath;(不包括名稱) //例: c:\test
獲取新的 Process 組件並將其與當前活動的進程關聯的主模塊的完整路徑,包含文件名(進程名)。
string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; result: X:\xxx\xxx\xxx.exe (.exe文件所在的目錄+.exe文件名)
獲取和設置當前目錄(即該進程從中啟動的目錄)的完全限定路徑。
string str = System.Environment.CurrentDirectory; result: X:\xxx\xxx (.exe文件所在的目錄)
獲取當前 Thread 的當前應用程序域的基目錄,它由程序集沖突解決程序用來探測程序集。
string str = System.AppDomain.CurrentDomain.BaseDirectory; result: X:\xxx\xxx\ (.exe文件所在的目錄+"\")
獲取和設置包含該應用程序的目錄的名稱。
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase; result: X:\xxx\xxx\ (.exe文件所在的目錄+"\")
獲取啟動了應用程序的可執行文件的路徑,不包括可執行文件的名稱。
string str = System.Windows.Forms.Application.StartupPath; result: X:\xxx\xxx (.exe文件所在的目錄)
獲取啟動了應用程序的可執行文件的路徑,包括可執行文件的名稱。
string str = System.Windows.Forms.Application.ExecutablePath; result: X:\xxx\xxx\xxx.exe (.exe文件所在的目錄+.exe文件名)
獲取應用程序的當前工作目錄(不可靠)。
string str = System.IO.Directory.GetCurrentDirectory(); result: X:\xxx\xxx (.exe文件所在的目錄) 獲取系統特殊文件夾路徑(收藏夾,桌面)
1、 收藏夾路徑
System.Environment.GetFolderPath(System.Environment.SpecialFolder.Favorites)
2、 桌面路徑
System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop)
更多請見枚舉類System.Environment.SpecialFolder
static void Main(string[] args) { //Environment.GetFolderPath(Environment.SpecialFolder); // 此方法檢索指向系統特殊文件夾(如 Program Files、Programs、System 或 Startup)的路徑, //可用於訪問公共信息。特殊文件夾在默認情況下由系統設置,或者由用戶在安裝 Windows 的某個版本時顯式進行設置。 //folder 參數指定要檢索的特殊文件夾,且該參數必須是 Environment.SpecialFolder 枚舉中的一個值;任何其他值都將引發異常。 //folder的枚舉 //ApplicationData 目錄,它用作當前漫游用戶的應用程序特定數據的公共儲存庫。 // CommonApplicationData 目錄,它用作所有用戶使用的應用程序特定數據的公共儲存庫。 // LocalApplicationData 目錄,它用作當前非漫游用戶使用的應用程序特定數據的公共儲存庫。 // Cookies 用作 Internet Cookie 的公共儲存庫的目錄。 // Desktop 邏輯桌面,而不是物理文件系統位置。 // Favorites 用作用戶收藏夾項的公共儲存庫的目錄。 // History 用作 Internet 歷史記錄項的公共儲存庫的目錄。 // InternetCache 用作 Internet 臨時文件的公共儲存庫的目錄。 // Programs 包含用戶程序組的目錄。 // MyComputer “我的電腦”文件夾。 // MyMusic “My Music”文件夾。 // MyPictures “My Pictures”文件夾。 // Recent 包含用戶最近使用過的文檔的目錄。 // SendTo 包含“發送”菜單項的目錄。 // StartMenu 包含“開始”菜單項的目錄。 // Startup 對應於用戶的“啟動”程序組的目錄。 // System “System”目錄。 // Templates 用作文檔模板的公共儲存庫的目錄。 // DesktopDirectory 用於物理上存儲桌面上的文件對象的目錄。 // Personal 用作文檔的公共儲存庫的目錄。 // MyDocuments “我的電腦”文件夾。 // ProgramFiles “Program files”目錄。 // CommonProgramFiles 用於應用程序間共享的組件的目錄。 Console.WriteLine("公共存儲庫:{0}",Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)); Console.WriteLine("目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)); Console.WriteLine("目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)); Console.WriteLine("COOKIE路徑:{0}",Environment.GetFolderPath(Environment.SpecialFolder.Cookies)); Console.WriteLine("邏輯桌面:{0}",Environment.GetFolderPath(Environment.SpecialFolder.Desktop)); Console.WriteLine("收藏夾路徑:{0}",Environment.GetFolderPath(Environment.SpecialFolder.Favorites)); Console.WriteLine("網頁瀏覽歷史記錄路徑:{0}",Environment.GetFolderPath(Environment.SpecialFolder.History)); Console.WriteLine("Internet臨時文件的路徑:{0}",Environment.GetFolderPath(Environment.SpecialFolder.InternetCache)); Console.WriteLine("應用程序目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.Programs)); Console.WriteLine("我的電腦目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.MyComputer)); Console.WriteLine("我的音樂目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.MyMusic)); Console.WriteLine("圖片目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)); Console.WriteLine("最近使用文檔目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.Recent)); Console.WriteLine("最近發送文件目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.SendTo)); Console.WriteLine("啟動菜單中開始的目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.StartMenu)); Console.WriteLine("System目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.System)); Console.WriteLine("用作文檔模板的公共儲存庫的目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.Templates)); Console.WriteLine("用於物理上存儲桌面上的文件對象的目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)); Console.WriteLine("用作文檔的公共儲存庫的目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.Personal)); Console.WriteLine("我的電腦文件夾:{0}",Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); Console.WriteLine("Program files目錄。 :{0}",Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)); Console.WriteLine("用於應用程序間共享的組件的目錄:{0}",Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)); Console.ReadLine(); }