.Net 中 获取当前应用程序启动目录的几个方法和Path.Combine 细节
一. .Net 中 獲取當前應用程序啟動目錄的幾個方法
?
AppDomain.CurrentDomain.BaseDirectory?代表的是程序集所在的目錄,它具有讀取和寫入的屬性。
?
AppDomainSetup.ApplicationBase代表包含應用程序的目錄位置,它具有讀取和寫入的屬性。
?
Environment.CurrentDirectory獲取和設置當前目錄(即該進程從中啟動的目錄)的完全限定路徑。
但是用了組件里面的打開,保存,選擇路徑,就出現了問題。
后來進過嘗試發現,打開和保存會修改當前程序目錄,也就是修改Environment.CurrentDirectory的值,但是folderBrowserDialog組件(用來選擇路徑)不會改變當前路徑Environment.CurrentDirectory的值。
?
Application.StartupPath代表應用程序啟動的當前目錄,Forms程序一般是程序的exe文件所在位置,?需要注意的是,這個是代表程序啟動的目錄,不是程序所在的目錄,在?windows service中是在\windows\system32目錄下的.
?
關于獲取當前應用程序集的位置,和名稱還有一種方式就是直接使用反射對當前應用程序集進行查看.
Path.GetDirectoryName(System.Reflection.Assembly.G etExecutingAssembly().GetName().CodeBase).Substring(6);
這個也可以使用AppDomain.CurrentDomain.BaseDirectory 來獲取的
?
二. Path.Combine 細節
System.IO.Path.Combine 簡單來說,就是合并兩個路徑字符串。
比如如下調用,
返回的字符串路徑如后: C:\11\aa.txt
這個方法的聲明如下:
public?static?string?Combine?(??string?path1,??string?path2?)
我們在合并一些目錄的時候,它的兩個參數有些特殊限制,下面我們就來依次看這些特殊限制
1、如果其中一個參數為 null ,會拋出異常:
An unhandled exception of type 'System.ArgumentNullException' occurred in mscorlib.dll
Additional information: Value cannot be null.
2、如果指定的路徑之一是零長度字符串,則該方法返回其他路徑。當然,兩個都是零長度字符串,則返回的就是 string.Empty ;
3、如果 path2 包含絕對路徑,則該方法返回 path2。
比如:
tmp 就等于 @"D:\aa.txt"
4、 path2 不能以 \ 和 / 開頭的字符串, 如果是這個字符串開頭的,則返回 path2 。
比如以下代碼:
string?p2?=?"C:\\aa";
string?p12?=?"http://www.cnblogs.com/llcto/admin/file://p12/";
string?p13?=?"http://www.cnblogs.com/llcto/admin/file://p13//";
string?p15?=?"/p13/";
Console.WriteLine(Path.Combine(p1,?p12));
Console.WriteLine(Path.Combine(p1,?p13));
Console.WriteLine(Path.Combine(p1,?p15));
Console.WriteLine(Path.Combine(p2,?p12));
Console.WriteLine(Path.Combine(p2,?p13));
Console.WriteLine(Path.Combine(p2,?p15));
依次顯示的是:
\p12
\p13\
/p13/
\p12
\p13\
/p13/
該函數工作原理
如果 path1 不是一個驅動器引用(即不是“C:”或“D:”)而且不是以 DirectorySeparatorChar、AltDirectorySeparatorChar 或 VolumeSeparatorChar 中定義的有效分隔符結束,則在串聯前將 DirectorySeparatorChar 追加到 path1 中。
如果 path2 不包括根(例如,如果 path2 沒有以分隔符或驅動器規格起始),則結果是兩個路徑的串聯,具有介于其間的分隔符。如果 path2 包括根,則返回 path2。
由于有空白時不進行參數分析,如果 path2 為“ c:\\ ”,則將其追加到 path1,而不是僅返回 path2。
不是目錄和文件名的所有無效字符都被 Combine 方法解釋為不可接受的,因為您可以將這些字符用于搜索通配符。例如,盡管 Path.Combine("c:\\", "*.txt") 可能是無效的(如果您要根據它創建一個文件),但它作為搜索字符串是有效的。因此 Combine 方法成功解釋它。
Path.DirectorySeparatorChar 字段?
提供平臺特定的字符,該字符用于在反映分層文件系統組織的路徑字符串中分隔目錄級別。
該字段的值在 Unix 上為斜杠(“/”),在 Windows 和 Macintosh 操作系統上為反斜杠(“\”)。
Path.AltDirectorySeparatorChar 字段
提供平臺特定的替換字符,該替換字符用于在反映分層文件系統組織的路徑字符串中分隔目錄級別。
該字段的值在 Unix 上為反斜杠(“\”),在 Windows 和 Macintosh 操作系統上為斜杠(“/”)。
Path.VolumeSeparatorChar 字段
提供平臺特定的卷分隔符。
該字段的值在 Windows 和 Macintosh 上為冒號(“:”),在 Unix 操作系統上為斜杠(“/”)。
?
Path.Combine 細節部分來自CSDN博客:http://blog.csdn.net/jelink/archive/2006/08/30/1144367.aspx
?
轉載于:https://www.cnblogs.com/llcto/archive/2011/03/24/1993550.html
總結
以上是生活随笔為你收集整理的.Net 中 获取当前应用程序启动目录的几个方法和Path.Combine 细节的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server中事务日志自动增长对
- 下一篇: .DLL文件是什么?