C# 获取程序运行时路径
Ø 前言
开发中,很多时候都需要获取程序运行时路径,比如:反射、文件操作等。.NET Framework 已经封装了这些功能,可以很方便的使用。
C# 中有很多类都可以获取程序运行时路径,我们没必要记住所有的,只需要记住常用的(其他了解即可),比如:
1. System.AppDomain.CurrentDomain.BaseDirectory,获取基目录,它由程序集冲突解决程序用来探测程序集。
2. System.Environment.CurrentDirectory,获取或设置当前工作目录的完全限定路径。
3. System.IO.Directory.GetCurrentDirectory(),获取应用程序的当前工作目录。
4. System.Web.HttpRuntime.BinDirectory,获取当前应用程序的 /bin 目录的物理路径。
5. System.Windows.Forms.Application.StartupPath,获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
1. 所涉及的所有类
1) System.AppDomain,程序集:mscorlib.dll。
2) System.Environment,程序集:mscorlib.dll。
3) System.IO.Directory,程序集:mscorlib.dll。
4) System.Reflection.Assembly,程序集:mscorlib.dll。
5) System.Diagnostics.Process,程序集:System.dll。
6) System.Web.HttpRuntime,程序集:System.Web.dll。
7) System.Web.HttpContext,程序集:System.Web.dll。
8) System.Web.Hosting.HostingEnvironment,程序集:System.Web.dll。
9) System.Windows.Forms.Application,程序集:System.Windows.Forms.dll。
2. 适用项目
1) 类库
2) Web 应用程序
3) ASP.NET MVC
4) ASP.NET Web API
5) 控制台应用程序
6) 窗体应用程序
1. System.AppDomain(程序集:mscorlib.dll)
适用项目:通用(不适合 Web API?)。
1) CurrentDomain.BaseDirectory,获取基目录,它由程序集冲突解决程序用来探测程序集。
string path = AppDomain.CurrentDomain.BaseDirectory; //F:\ConsoleApplication\bin\Debug\
或者(两者使用的同一个 System.AppDomain 对象实例)
string path = System.Threading.Thread.GetDomain().BaseDirectory; //F:\ConsoleApplication\bin\Debug\
2) CurrentDomain.SetupInformation.ApplicationBase,获取或设置包含该应用程序的目录的名称。
string path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; //F:\ConsoleApplication\bin\Debug\
2. System.Environment(程序集:mscorlib.dll)
适用项目:通用(不适合 Web API?)。
1) CurrentDirectory,获取或设置当前工作目录的完全限定路径。
string path = Environment.CurrentDirectory; //F:\ConsoleApplication\bin\Debug
2) GetEnvironmentVariable(),从当前进程检索环境变量的值。
string path = Environment.GetEnvironmentVariable("TEMP"); // C:\Users\GOO\AppData\Local\Temp
1. 参数 variable:环境变量名。可选值:
WINDIR:C:\WINDOWS
INCLUDE:null
TMP/TEMP:C:\Users\GOO\AppData\Local\Temp
PATH:环境变量路径(很多)
2. 具体参数值可参考系统环境变量列表,如图:

3. System.IO.Directory(程序集:mscorlib.dll)
适用项目:通用(不适合 Web API?)。
1) GetCurrentDirectory(),获取应用程序的当前工作目录。
string path = Directory.GetCurrentDirectory(); //F:\ConsoleApplication\bin\Debug
4. System.Assembly(程序集:mscorlib.dll)
适用项目:通用(不适合 Web API?)。
1) GetExecutingAssembly().Location,获取包含清单的已加载文件的路径或 UNC 位置。
string path = Assembly.GetExecutingAssembly().Location; //F:\ConsoleApplication\bin\Debug\ConsoleApplication.exe
5. System.Diagnostics.Process(程序集:System.dll)
适用项目:通用(不适合 Web API?)。
1) GetCurrentProcess().MainModule.FileName,获取模块的完整路径。
string path = Process.GetCurrentProcess().MainModule.FileName; //F:\ConsoleApplication\bin\Debug\ConsoleApplication.vshost.exe
6. System.Web.HttpRuntime(程序集:System.Web.dll)
适用项目:Web 应用程序、ASP.NET MVC、ASP.NET Web API。
1) AppDomainAppPath,获取承载在当前应用程序域中的应用程序的应用程序目录的物理驱动器路径。
string path = HttpRuntime.AppDomainAppPath; //F:\WebForm.Basis\
2) BinDirectory,获取当前应用程序的 /bin 目录的物理路径。
string path = HttpRuntime.BinDirectory; //F:\WebForm.Basis\bin\
7. System.Web.HttpContext(程序集:System.Web.dll)
适用项目:Web 应用程序、ASP.NET MVC、ASP.NET Web API。
1) Current.Server.MapPath(),将指定的虚拟路径映射到物理路径。
string path = HttpContext.Current.Server.MapPath(@"\"); //F:\WebForm.Basis\
或者
1. Web 应用程序(两者使用的同一个 System.Web.HttpServerUtility 对象实例)
string path = base.Server.MapPath(@"\");
2. ASP.NET MVC(使用的 System.Web.HttpServerUtilityBase 对象)
string path = base.Server.MapPath(@"\");
2) Current.Request.MapPath(),将指定的虚拟路径映射到物理路径。
string path = HttpContext.Current.Request.MapPath(@"\"); //F:\WebForm.Basis\
或者
1. Web 应用程序(两者使用的同一个 System.Web.HttpRequest 对象实例)
string path = base.Request.MapPath(@"\");
2. ASP.NET MVC(使用的 System.Web.HttpRequestBase 对象)
string path = base.Request.MapPath(@"\");
3) Current.Request.PhysicalPath,获取与请求的 URL 相对应的物理文件系统路径。
string path = HttpContext.Current.Request.PhysicalPath; //F:\WebForm.Basis\RuntimePathTest
其他项目
1. ASP.NET MVC 结果:F:\MVC5.Basis\Basic\One
2. ASP.NET Web API 结果:F:\WebAPI2.Basic\api\Basic\One
4) Current.Request.PhysicalApplicationPath,获取当前正在执行的服务器应用程序的根目录的物理文件系统路径。
string path = HttpContext.Current.Request.PhysicalApplicationPath; //F:\WebForm.Basis\
其他项目同上。
5) Request.Url.AbsoluteUri,获取绝对 URI。
string path = HttpContext.Current.Request.Url.AbsoluteUri; //http://localhost:50049/RuntimePathTest
其他项目
1. ASP.NET MVC 结果:http://localhost:23025/Basic/One
2. ASP.NET Web API 结果:http://localhost:48987/api/Basic/One
8. System.Web.Hosting.HostingEnvironment(程序集:System.Web.dll)
适用项目:Web 应用程序、ASP.NET MVC、ASP.NET Web API。
1) ApplicationPhysicalPath,获取磁盘上指向应用程序目录的物理路径。
string path = HostingEnvironment.ApplicationPhysicalPath; //F:\WebForm.Basis\
9. System.Windows.Forms.Application(程序集:System.Windows.Forms.dll)
适用项目:窗体应用程序。
1) StartupPath,获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
string path = Application.StartupPath; //F:\WinForm.Basic\bin\Debug
2) ExecutablePath:获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
string path = Application.ExecutablePath; //F:\WinForm.Basic\bin\Debug\WinForm.Basic.EXE
C# 获取程序运行时路径的更多相关文章
- Qt使用windows API获取程序运行时占用内存 good
使用的是psapi.h中的GetProcessMemoryInfo函数,但是运行到该函数时就强制退出了. 后来,百度到原因是 原来Qt编译时加了-mthread,createprocess时要使的Ha ...
- golang获取程序运行路径
golang获取程序运行路径: /* 获取程序运行路径 */ func getCurrentDirectory() string { dir, err := filepath.Abs(filepath ...
- 【转】Java Web 项目获取运行时路径 classpath
Java Web 项目获取运行时路径 classpath 假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/java/下, 那么ja ...
- Java Web 项目获取运行时路径 classpath
假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/java/下, 那么java文件夹和resources文件夹在运行时就是class ...
- c/c++编译时,指定程序运行时查找的动态链接库路径
http://blog.csdn.net/tsxw24/article/details/10220735 c/c++编译时,指定程序运行时查找的动态链接库路径 分类: c/c++ linux 2013 ...
- .NET Core 获取程序运行环境信息与反射的应用
目录 RuntimeInformation.Environment 获取信息 反射获取信息 获取某个属性的值以及别名 反射获取信息 使用 总结 笔者的九篇反射系统文章已经完结,但是笔者会持续更新反射在 ...
- 小程序运行时如何助力传统APP转型?
小程序和H5或者RN有什么区别?优越性在哪里? 长期以来,移动互联网界一直在寻找一种既能获得Native原生的体验,又可以低门槛快速开发的技术.在这个过程中出现了很多尝试,例如React Native ...
- java程序运行时内存分配详解
java程序运行时内存分配详解 这篇文章主要介绍了java程序运行时内存分配详解 ,需要的朋友可以参考下 一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个 ...
- Java程序运行时内存划分
1.Java程序跨平台运行的原因 主要原因是:各种平台的JVM和字节码文件 Java源程序--具体平台的机器代码文件---被编译器翻译成平台无关的Class文件,又用特定JVM运行字节码文件,JVM在 ...
随机推荐
- 【原创】tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询)
最简单的线段树之一,中文题目,不翻译.... 注释讲的比较少,这已经是最简单的线段树,如果看不懂真的说明最基础的理论没明白 推荐一篇文章http://www.cnblogs.com/liwenchi/ ...
- LVM-COW写实备份
[root@localhost ~]# fdisk -l /dev/sdb /dev/sdc | grep "LVM"/dev/sdb1 1 9660 77593918+ 8e L ...
- Jupyter-Notebook 删除指定 kernel
原来是Python3+C# 查看列表jupyter kernelspec list 删除指定kernel:jupyter kernelspec remove icsharpkernel 删除成功:(刷 ...
- ACM-ICPC 2017 Asia Xi'an A XOR (线性基+线段树思想)
题目链接 题意;给个数组,每次询问一个区间你可以挑任意个数的数字异或和 然后在或上k的最大值 题解:线性基不知道的先看这个,一个线性基可以log的求最大值把对应去区间的线性基求出来然后用线段树维护线性 ...
- 用table绘制 等宽等间距的单元
css: .test1 { empty-cells: show;/*show:指定当表格的单元格无内容时,显示该单元格的边框.*/ border-spacing: 10px 10px;/*用长度值来定 ...
- [bzoj1692][队列变换]
题目链接 思路 首先肯定想到贪心,从队尾和队首取更小的那个. 但是如果遇到队尾和队首一样大的情况呢,总不能再挨个往前比较.所以就把整个字符串倒过来再挂到现在字符串的后面,也就是把当前字符串对称过去.然 ...
- java 分隔函数split("",-1)的用途
转: java 分隔函数split("",-1)的用途 2017年12月14日 11:37:58 jaryle 阅读数:8517 1.如果字符串最后一位有值,则没有区别, 2. ...
- php中加密和解密
项目要和第三方进行接口对接,所以数据的安全很重要.第一次自己设计并实现,学习记录下 网上查了很多资料,真的很深奥 对称加密: 双方共用一个约定好的密钥进行数据的加密和解密,但是当密匙丢失,数据将有泄露 ...
- Mac 上有哪些比较有意思的小软件?
文章素材来源:微博.新浪看点 收录于:风云社区(SCOEE)[提供mac软件下载] 更多专题,可关注小编[磨人的小妖精],查看我的文章,也可上[风云社区 SCOEE],查找和下载相关软件资源. (一) ...
- python自动化开发-[第二十天]-form表单,CBV和FBV,序列化
1.CBV和FBV的用法 2.序列化用法 3.form表单 一.CBV和FBV 1.cbv是 class based view(基于类),fbv是function based view(基于函数) 2 ...