C#獲取當前路徑的7種方法

来源:http://www.cnblogs.com/masonlu/archive/2016/03/26/5323340.html
-Advertisement-
Play Games

總結C#獲取當前路徑的7種方法 C#獲取當前路徑的方法如下: 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName -獲取模塊的完整路徑。 2. System.Environment.CurrentDirector ...


總結C#獲取當前路徑的7種方法  

  •  C#獲取當前路徑的方法如下:  
  • 1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName  
  • -獲取模塊的完整路徑。  
  • 2. System.Environment.CurrentDirectory  
  • -獲取和設置當前目錄(該進程從中啟動的目錄)的完全限定目錄。  
  • 3. System.IO.Directory.GetCurrentDirectory()  
  • -獲取應用程式的當前工作目錄。這個不一定是程式從中啟動的目錄啊,有可能程式放在C:\www里,這個函數有可能返回C:\Documents and Settings\ZYB\,或者C:\Program Files\Adobe\,有時不一定返回什麼東東,我也搞不懂了。  
  • 4. System.AppDomain.CurrentDomain.BaseDirectory  
  • -獲取程式的基目錄。  
  • 5. System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase  
  • -獲取和設置包括該應用程式的目錄的名稱。  
  • 6. System.Windows.Forms.Application.StartupPath  
  • -獲取啟動了應用程式的可執行文件的路徑。效果和2、5一樣。只是5返回的字元串後面多了一個"\"而已  
  • 7. System.Windows.Forms.Application.ExecutablePath  
  • -獲取啟動了應用程式的可執行文件的路徑及文件名,效果和1一樣。  
  • 對於Windows程式和Web 應用程式來說,他們運行的路徑是不一樣的,所以關鍵是判斷當前運行的程式是哪種程式.於是我們可以使用如下的代碼  
  • 1   string path = "";    
  • 2      
  • 3   if (System.Environment.CurrentDirectory == AppDomain.CurrentDomain.BaseDirectory)//Windows應用程式則相等   
  • 4      
  • 5   ...{    
  • 6      
  • 7   path = AppDomain.CurrentDomain.BaseDirectory;    
  • 8      
  • 9   }    
  • 10     
  • 11  else   
  • 12     
  • 13  ...{    
  • 14     
  • 15  path = AppDomain.CurrentDomain.BaseDirectory + "Bin\";    
  • 16     
  • 17  }   
  • 這樣如果我們寫了一個類庫,類庫中用到了Assembly.LoadFrom,由於是通用類庫,所以可能用到Windows程式中也可能用到Web中,那麼用上面的代碼就很方便了.  
  • 1、Server.MapPath  
  • 2、System.Windows.Forms.StartupPath  
  • 3、Type.Assembly.Location  
  • C#獲取當前路徑方法2可以應用於控制台應用程式,WinForm應用程式,Windows服務,方法1可以應用於Web應用程式,方法3都可以應用。  
  • 但方法3是載入應用程式的路徑。如果是Web應用程式,取得的路徑是:C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files目錄。所以Web項目還是使用Server.MapPath吧。否則建議使用方法2。如果自己新建類庫。可以加入對System.Windows.Forms.StartupPath的引用後使用。  
  • C#獲取當前路徑的方法就總結到這裡,希望對大家有所幫助。  
  •   
  •   
  • C#獲取程式當前路徑的方法   
  • //獲取新的 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文件所在的目錄)  
  •   
  •   
  • c# 獲取相對路徑  
  •  一、獲取當前文件的路徑  
  • 1.   System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName  
  •      獲取模塊的完整路徑,包括文件名。  
  • 2.   System.Environment.CurrentDirectory  
  •      獲取和設置當前目錄(該進程從中啟動的目錄)的完全限定目錄。  
  • 3.   System.IO.Directory.GetCurrentDirectory()  
  •      獲取應用程式的當前工作目錄。這個不一定是程式從中啟動的目錄啊,有可能程式放在C:\www里,這個函數有可能返回C:\Documents and Settings\ZYB\,或者C:\Program Files\Adobe\,有時不一定返回什麼東東,這是任何應用程式最後一次操作過的目錄,比如你用Word打開了E:\doc\my.doc這個文件,此時執行這個方法就返回了E:\doc了。  
  • 4. System.AppDomain.CurrentDomain.BaseDirectory  
  •      獲取程式的基目錄。  
  • 5. System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase  
  •      獲取和設置包括該應用程式的目錄的名稱。  
  • 6. System.Windows.Forms.Application.StartupPath  
  •      獲取啟動了應用程式的可執行文件的路徑。效果和2、5一樣。只是5返回的字元串後面多了一個"\"而已  
  • 7. System.Windows.Forms.Application.ExecutablePath  
  •      獲取啟動了應用程式的可執行文件的路徑及文件名,效果和1一樣。  
  • 二、操作環境變數  
  • 利用System.Environment.GetEnvironmentVariable()方法可以很方便地取得系統環境變數,如:  
  • System.Environment.GetEnvironmentVariable("windir")就可以取得windows系統目錄的路徑。  
  • 以下是一些常用的環境變數取值:  
  • System.Environment.GetEnvironmentVariable("windir");  
  • System.Environment.GetEnvironmentVariable("INCLUDE");  
  • System.Environment.GetEnvironmentVariable("TMP");  
  • System.Environment.GetEnvironmentVariable("TEMP");  
  • System.Environment.GetEnvironmentVariable("Path");  
  •  System.Environment.SystemDirectory ;C:/windows/system32目錄  
  • 最後貼出我進行上面操作獲得的變數值,事先說明,本人是編寫了一個WinForm程式,項目文件存放於D:\Visual Studio Projects\MyApplication\LifeAssistant,編譯後的文件位於D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug,最後的結果如下:  
  • 1、System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug\LifeAssistant.exe  
  • 2、System.Environment.CurrentDirectory=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug  
  • 3、System.IO.Directory.GetCurrentDirectory()=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug  
  • 1 asp.net webform用“Request.PhysicalApplicationPath獲取站點所在虛擬目錄的物理路徑,最後包含“\”;  
  • 2.c# winform用  
  • A:“Application.StartupPath”:獲取當前應用程式所在目錄的路徑,最後不包含“\”;  
  • B:“Application.ExecutablePath ”:獲取當前應用程式文件的路徑,包含文件的名稱;  
  • C:“AppDomain.CurrentDomain.BaseDirectory”:獲取當前應用程式所在目錄的路徑,最後包含“\”;  
  • D:“System.Threading.Thread.GetDomain().BaseDirectory”:獲取當前應用程式所在目錄的路徑,最後包含“\”;  
  • E:“Environment.CurrentDirectory”:獲取當前應用程式的路徑,最後不包含“\”;  
  • F:“System.IO.Directory.GetCurrentDirectory”:獲取當前應用程式的路徑,最後不包含“\”;  
  • 3.c# windows service  
  • 用“AppDomain.CurrentDomain.BaseDirectory”  
  • 或“System.Threading.Thread.GetDomain().BaseDirectory”;  
  • 用“Environment.CurrentDirectory”和  
  • “System.IO.Directory.GetCurrentDirectory”將得到“ system32”目錄的路徑;  
  • 如果要使用“Application.StartupPath”或“Application.ExecutablePath ”,需要手動添加對“System.Windows.Forms.dll ”的引用,併在程式開頭用“using System.Windows.Forms”聲明該引用;  
  • 4.在卸載程式獲取系統安裝的目錄:  
  • System.Reflection.Assembly curPath = System.Reflection.Assembly.GetExecutingAssembly();  
  •          string path=curPath.Location;//得到安裝程式類SetupLibrary文件的路徑,獲取這個文件路徑所在的目錄即得到安裝程式的目錄;  
  •   
  • 4、System.AppDomain.CurrentDomain.BaseDirectory=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug\  
  • 5、System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug\  
  • 6、System.Windows.Forms.Application.StartupPath=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug  
  • 7、System.Windows.Forms.Application.ExecutablePath=D:\Visual Studio Projects\MyApplication\LifeAssistant\bin\Debug\LifeAssistant.exe  
  • System.Environment.GetEnvironmentVariable("windir")=C:\WINDOWS  
  • System.Environment.GetEnvironmentVariable("INCLUDE")=C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\include\  
  • System.Environment.GetEnvironmentVariable("TMP")=C:\DOCUME~1\zhoufoxcn\LOCALS~1\Temp  
  • System.Environment.GetEnvironmentVariable("TEMP")=C:\DOCUME~1\zhoufoxcn\LOCALS~1\Temp  
  • System.Environment.GetEnvironmentVariable("Path")=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\jdk1.5.0\bin;C:\MySQLServer5.0\bin;C:\Program Files\Symantec\pcAnywhere\;C:\Program Files\Microsoft SQL Server\80\Tools\BINN  
  •   
  •   
  •   
  •   
  • C# 相對路徑 系統路徑  
  • 2007-12-22 09:53  
  • //獲取啟動了應用程式的可執行文件的路徑,不包括可執行文件的名稱。    
  • string   str5=Application.StartupPath;  
  • //可獲得當前執行的exe的文件名。        
  • string   str1   =Process.GetCurrentProcess().MainModule.FileName;  
  • //獲取和設置當前目錄(即該進程從中啟動的目錄)的完全限定路徑。備註   按照定義,如果該進程在本地或網路驅動器的根目錄中啟動,則此屬性的值為驅動器名稱後跟一個尾部反斜杠(如“C:\”)。如果該進程在子目錄中啟動,則此屬性的值為不帶尾部反斜杠的驅動器和子目錄路徑(如“C:\mySubDirectory”)。    
  • string   str2=Environment.CurrentDirectory;  
  • //獲取應用程式的當前工作目錄。    
  • string   str3=Directory.GetCurrentDirectory();  
  • //獲取基目錄,它由程式集衝突解決程式用來探測程式集。    
  • string   str4=AppDomain.CurrentDomain.BaseDirectory;  
  • //獲取啟動了應用程式的可執行文件的路徑,不包括可執行文件的名稱。    
  • string   str5=Application.StartupPath;  
  • //獲取啟動了應用程式的可執行文件的路徑,包括可執行文件的名稱。    
  • string   str6=Application.ExecutablePath;  
  • //獲取或設置包含該應用程式的目錄的名稱。  
  • string   str7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;  
  • //例子  
  • Application.StartupPath;  
  • //可以得到F:\learning\c#Training\win\win\bin\Debug  
  • //註意自己補兩個\  
  • Application.StartupPath+"\\3.jpg";  
  •    
  •    
  •    
  • 在c#中,相對路徑是用"."和".."表示,  
  • "."代表當前目錄,  
  • ".."代表上一級錄。  
  • 例如 假設我用vs2005在D:\My Documents\Visual Studio 2005\Projects目錄里創建了一個名叫controls的項目,即在Projects文件夾里有一個controls文件夾,controls文件夾里有三個文件:controls.sln   controls文件夾   GulfOfStLawrence文件夾。  
  • D:\My Documents\Visual Studio 2005\Projects\Controls\Controls\bin\Debug是這個簡單項目能夠運行的可執行文件Controls.exe  
  •   
  • 現在我想要 D:\My Documents\Visual Studio 2005\Projects\Controls\GulfOfStLawrence文件夾下的Gulf_of_St._Lawrence.mxd(arcgis desktop)工程文件路徑。  
  • 那麼相對路徑應該就是"..\..\..\GulfOfStLawrence\Gulf_of_St._Lawrence.mxd"  
  • string filename = @"..\..\..\GulfOfStLawrence\Gulf_of_St._Lawrence.mxd";  
  •   
  • 心得:1.用相對路徑能增加項目的可移植性。使一個工程在移植過程中變得簡單,節省了大量佈置與工程相關的文件的時間。(如果設置的是絕對路徑)。  
  •      2.使用相對路徑也使程式代碼變得簡單  
  •    3. 但有一點必須註意:(只能在同一個驅動器里(如:都在D:里)使用相對路徑)。  

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在項目中,採用code first時建立的模型對象不能直接用於數據傳輸,需要從新根據需求建立Dto對象 為什麼需要建立Dto對象呢? 那麼在項目中需要將Model轉換成DTO,為了快速方便的轉換,可以採用Lambda Expression快速實現, 例如,建立了領域模型Book 建立DTO對象 建立 ...
  • 什麼是WCF Windows Communication Foundation(WCF)是由微軟開發的一系列支持數據通信的應用程式框架,可以翻譯為Windows 通訊開發平臺。 整合了原有的windows通訊的 .net Remoting,WebService,Socket的機制,並融合有Http和 ...
  • 01.什麼是三層架構 01.表示層(User Interface layer):負責接收用戶的輸入,將輸出呈現給用戶,以及訪問安全性驗證,並對輸入的數據的正確性,有效性及呈現樣式負責,但對輸出的數據的正確性不負責。 02.業務邏輯層(Business Logic Layer):負責系統領域業務的處理 ...
  • 一、預編譯的優點 1. 由於頁和代碼文件在第一次被請求時無需編譯,因此可以縮短對用戶的響應時間。這對於更新頻繁的大型網站尤為有用 2. 可以在用戶看到網站之前識別編譯時的 Bug 3. 可以創建站點的已編譯版本,並將該版本部署到成品伺服器,而無需使用源代碼 二、就地預編譯與針對部署的預編譯 1. 就 ...
  • 問題背景:如果使用plsql等工具可以連接Oralce說明與Oralce安裝無關。 VS連接資料庫時提示“ORA-12154: TNS: 無法解析指定的連接標識符”的解決方法 解決步驟: 1、去網上下載“instantclient-basic-win32-11.2.0.1.0.zip”,名稱為ins ...
  • 其實很早之前我就已經瞭解了在winform下實現插件編程,原理很簡單,主要實現思路就是:先定一個插件介面作為插件樣式及功能的約定,然後具體的插件就去實現這個插件介面,最後宿主(應用程式本身)就利用反射動態獲取實現了插件介面的類型作為合法的插件,從而完成動態載入及宿主與插件之間的互動。因為之前一段時間 ...
  • Windows是一個強大的操作系統,也會向開發者提供海量的系統API來幫助開發者來完成Windows系統軟體的開發工作。 整理的部分Windows API,C#可以直接調用。 1.獲取.exe應用程式的圖標 2.獲取硬碟信息 3.開機啟動程式 4.系統熱鍵操作 5.系統進程操作 6.改變視窗 ...
  • 1、什麼是類? 面向對象的語言,最基本的就是類。在C#中,類是這樣來定義的:類代表一組具有公共屬性和行為的對象。 舉個例子,現實生活中,人就是一個“類”,但這隻是一個統稱,指所有的人。我們要找個人一起去玩,此時就需要找到一個具體的人。比如我和小紅,我們兩個就是“人”這個類的兩個實例。 2、C#中如何 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...