1.System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 获取模块的完整路径(包含文件名)
2.System.Environment.CurrentDirectory 获取和设置当前目录(该进程从中启动的目录)的完全限定目录(不含程序文件名)
3.System.IO.Directory.GetCurrentDirectory() 获取应用程序的当前工作目录。(不含程序文件名)
4.System.AppDomain.CurrentDomain.BaseDirectory 获取程序的基目录。(不含程序文件名)返回的字符串后面多了一个"/"
5.System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase 获取和设置包括该应用程序的目录的名称。返回的字符串后面多了一个"/"
6.System.Windows.Forms.Application.StartupPath 获取启动了应用程序的可执行文件的路径。
7.System.Windows.Forms.Application.ExecutablePath 获取启动了应用程序的可执行文件的路径及文件名,含文件名
效果:
1和7一样(完整路径,含文件名)
2、3和6一样,(目录路径)
4和5一样(目录路径,结尾处跟上面比多了"/")
方法1:
Directory.GetCurrentDirectory()。
这个方法只能在.NET的完整版中使用,NETCF中不支持该功能,调用时会引发异常。
方法2:
System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase)。
这个方法是MSDN中给出的针对NETCF平台的,当在PC的NET完整版中获取到的路径中测试时,发现最终的路径中带有file:前缀,如file:\c:\debug,一般情况下我们并不需要这个前缀,可以手动将其去掉。
方法3:
System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName).
该方法也是针对NETCF给出的解决方案,当在PC的NET完整版测试中可以获取到一致的结果。
PC上获取程序当前运行目录,常用作法:
1> path = System.Windows.Forms.Application.StartupPath; //不包括EXE的名称
2> path = System.Windows.Forms.Application.ExecutablePath; //包括EXE的名称
3> path = System.Reflection.Assembly.GetExecutingAssembly().Location;
4> path = System.Environment.CurrentDirectory;
小结:
如果考虑到代码在PC和PDA上的兼容性,则建议使用第三种方法。第一种方法是万万不行的,而且第一种方式获取到的路径也并不一定就是真正的应用程序所在的路径。