.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 简单来说,就是合并两个路径字符串。
比如如下调用,

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

返回的字符串路径如后: 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。
比如:

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

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

4、 path2 不能以 \ 和 / 开头的字符串, 如果是这个字符串开头的,则返回 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/

该函数工作原理

如果 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

 

posted @ 2011-03-24 11:04  虾吵吵  阅读(1113)  评论(0编辑  收藏  举报