日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

.Net 中 获取当前应用程序启动目录的几个方法和Path.Combine 细节

發(fā)布時(shí)間:2025/4/16 asp.net 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net 中 获取当前应用程序启动目录的几个方法和Path.Combine 细节 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. .Net 中 獲取當(dāng)前應(yīng)用程序啟動(dòng)目錄的幾個(gè)方法

?

AppDomain.CurrentDomain.BaseDirectory?

代表的是程序集所在的目錄,它具有讀取和寫(xiě)入的屬性。

?

AppDomainSetup.ApplicationBase

代表包含應(yīng)用程序的目錄位置,它具有讀取和寫(xiě)入的屬性。

?

Environment.CurrentDirectory

獲取和設(shè)置當(dāng)前目錄(即該進(jìn)程從中啟動(dòng)的目錄)的完全限定路徑。
但是用了組件里面的打開(kāi),保存,選擇路徑,就出現(xiàn)了問(wèn)題。
后來(lái)進(jìn)過(guò)嘗試發(fā)現(xiàn),打開(kāi)和保存會(huì)修改當(dāng)前程序目錄,也就是修改Environment.CurrentDirectory的值,但是folderBrowserDialog組件(用來(lái)選擇路徑)不會(huì)改變當(dāng)前路徑Environment.CurrentDirectory的值。

?

Application.StartupPath

代表應(yīng)用程序啟動(dòng)的當(dāng)前目錄,Forms程序一般是程序的exe文件所在位置,?需要注意的是,這個(gè)是代表程序啟動(dòng)的目錄,不是程序所在的目錄,在?windows service中是在\windows\system32目錄下的.

?

關(guān)于獲取當(dāng)前應(yīng)用程序集的位置,和名稱還有一種方式就是直接使用反射對(duì)當(dāng)前應(yīng)用程序集進(jìn)行查看.

Path.GetDirectoryName(System.Reflection.Assembly.G etExecutingAssembly().GetName().CodeBase).Substring(6);

這個(gè)也可以使用AppDomain.CurrentDomain.BaseDirectory 來(lái)獲取的

?

二. Path.Combine 細(xì)節(jié)

System.IO.Path.Combine 簡(jiǎn)單來(lái)說(shuō),就是合并兩個(gè)路徑字符串。
比如如下調(diào)用,

Path.Combine(@"C:\11","aa.txt")?

返回的字符串路徑如后: C:\11\aa.txt

這個(gè)方法的聲明如下:

public?static?string?Combine?(??string?path1,??string?path2?)


我們?cè)诤喜⒁恍┠夸浀臅r(shí)候,它的兩個(gè)參數(shù)有些特殊限制,下面我們就來(lái)依次看這些特殊限制

1、如果其中一個(gè)參數(shù)為 null ,會(huì)拋出異常:
An unhandled exception of type 'System.ArgumentNullException' occurred in mscorlib.dll
Additional information: Value cannot be null.

2、如果指定的路徑之一是零長(zhǎng)度字符串,則該方法返回其他路徑。當(dāng)然,兩個(gè)都是零長(zhǎng)度字符串,則返回的就是 string.Empty ;

3、如果 path2 包含絕對(duì)路徑,則該方法返回 path2。
比如:

string?tmp?=?Path.Combine(@"C:\11",?@"D:\aa.txt");

tmp 就等于 @"D:\aa.txt"

4、 path2 不能以 \ 和 / 開(kāi)頭的字符串, 如果是這個(gè)字符串開(kāi)頭的,則返回 path2 。
比如以下代碼:

string?p1?=?"C:\\aa\\";
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/

該函數(shù)工作原理

如果 path1 不是一個(gè)驅(qū)動(dòng)器引用(即不是“C:”或“D:”)而且不是以 DirectorySeparatorChar、AltDirectorySeparatorChar 或 VolumeSeparatorChar 中定義的有效分隔符結(jié)束,則在串聯(lián)前將 DirectorySeparatorChar 追加到 path1 中。

如果 path2 不包括根(例如,如果 path2 沒(méi)有以分隔符或驅(qū)動(dòng)器規(guī)格起始),則結(jié)果是兩個(gè)路徑的串聯(lián),具有介于其間的分隔符。如果 path2 包括根,則返回 path2。

由于有空白時(shí)不進(jìn)行參數(shù)分析,如果 path2 為“ c:\\ ”,則將其追加到 path1,而不是僅返回 path2。

不是目錄和文件名的所有無(wú)效字符都被 Combine 方法解釋為不可接受的,因?yàn)槟梢詫⑦@些字符用于搜索通配符。例如,盡管 Path.Combine("c:\\", "*.txt") 可能是無(wú)效的(如果您要根據(jù)它創(chuàng)建一個(gè)文件),但它作為搜索字符串是有效的。因此 Combine 方法成功解釋它。

Path.DirectorySeparatorChar 字段?
提供平臺(tái)特定的字符,該字符用于在反映分層文件系統(tǒng)組織的路徑字符串中分隔目錄級(jí)別。
該字段的值在 Unix 上為斜杠(“/”),在 Windows 和 Macintosh 操作系統(tǒng)上為反斜杠(“\”)。

Path.AltDirectorySeparatorChar 字段
提供平臺(tái)特定的替換字符,該替換字符用于在反映分層文件系統(tǒng)組織的路徑字符串中分隔目錄級(jí)別。
該字段的值在 Unix 上為反斜杠(“\”),在 Windows 和 Macintosh 操作系統(tǒng)上為斜杠(“/”)。

Path.VolumeSeparatorChar 字段
提供平臺(tái)特定的卷分隔符。
該字段的值在 Windows 和 Macintosh 上為冒號(hào)(“:”),在 Unix 操作系統(tǒng)上為斜杠(“/”)。

?

Path.Combine 細(xì)節(jié)部分來(lái)自CSDN博客:http://blog.csdn.net/jelink/archive/2006/08/30/1144367.aspx

?

轉(zhuǎn)載于:https://www.cnblogs.com/llcto/archive/2011/03/24/1993550.html

總結(jié)

以上是生活随笔為你收集整理的.Net 中 获取当前应用程序启动目录的几个方法和Path.Combine 细节的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。