Ø  前言

开发中,很多时候都需要获取程序运行时路径,比如:反射、文件操作等。.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# 获取程序运行时路径的更多相关文章

  1. Qt使用windows API获取程序运行时占用内存 good

    使用的是psapi.h中的GetProcessMemoryInfo函数,但是运行到该函数时就强制退出了. 后来,百度到原因是 原来Qt编译时加了-mthread,createprocess时要使的Ha ...

  2. golang获取程序运行路径

    golang获取程序运行路径: /* 获取程序运行路径 */ func getCurrentDirectory() string { dir, err := filepath.Abs(filepath ...

  3. 【转】Java Web 项目获取运行时路径 classpath

    Java Web 项目获取运行时路径 classpath 假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/java/下, 那么ja ...

  4. Java Web 项目获取运行时路径 classpath

    假设资源文件放在maven工程的 src/main/resources 资源文件夹下,源码文件放在 src/main/java/下, 那么java文件夹和resources文件夹在运行时就是class ...

  5. c/c++编译时,指定程序运行时查找的动态链接库路径

    http://blog.csdn.net/tsxw24/article/details/10220735 c/c++编译时,指定程序运行时查找的动态链接库路径 分类: c/c++ linux 2013 ...

  6. .NET Core 获取程序运行环境信息与反射的应用

    目录 RuntimeInformation.Environment 获取信息 反射获取信息 获取某个属性的值以及别名 反射获取信息 使用 总结 笔者的九篇反射系统文章已经完结,但是笔者会持续更新反射在 ...

  7. 小程序运行时如何助力传统APP转型?

    小程序和H5或者RN有什么区别?优越性在哪里? 长期以来,移动互联网界一直在寻找一种既能获得Native原生的体验,又可以低门槛快速开发的技术.在这个过程中出现了很多尝试,例如React Native ...

  8. java程序运行时内存分配详解

    java程序运行时内存分配详解 这篇文章主要介绍了java程序运行时内存分配详解 ,需要的朋友可以参考下   一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个 ...

  9. Java程序运行时内存划分

    1.Java程序跨平台运行的原因 主要原因是:各种平台的JVM和字节码文件 Java源程序--具体平台的机器代码文件---被编译器翻译成平台无关的Class文件,又用特定JVM运行字节码文件,JVM在 ...

随机推荐

  1. hdu3038How Many Answers Are Wrong(带权并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3038 题解转载自:https://www.cnblogs.com/liyinggang/p/53270 ...

  2. javascript Object的新方法

    今天复习es6,又看到Object的一堆方法,与es5的表现又有不一致,耗费了一整天,整理一下: 前几天在司徒正美的书里又看到了es5 Object的字眼,为了向下兼容,大神们也是牛逼的整理出一系列i ...

  3. 时间复杂度和大O表示法

    大O表示法:称一个函数g(n)是O(f(n)),当且仅当存在常数c>0和n0>=1,对一切n>n0均有|g(n)|<=c|f(n)|成立,也称函数g(n)以f(n)为界或者称g ...

  4. Electron一学习资源收集和练习demo

    1.近日为了做项目查资料学习electron,简直头都要炸了,就官方的electron-quick-start的例子进行了基本的练习之后,不断的查资料终于发现一些有用的demo来看源代码学习,一遍看代 ...

  5. 遍历HTML DOM 树

    <!-- NodeIterator --> <!DOCTYPE html> <html> <head> <meta charset="u ...

  6. 洛谷P3321 序列统计

    气死了,FFT了半天发现是NTT... 1004535809 这个东西是NTT模数,原根为3. 题意:给定集合,元素的大小不超过M.用这些元素组成长为n的序列,要求乘积模M为k,求方案数. n < ...

  7. HDU/HDOJ 1867 A + B for you again

    仔细了解KMP之后再看这题就会发现是裸题. 因为kmp我们可以求出s的f数组,表示能与p的多少前缀匹配.那么我们只需取f[s.size() - 1]即可. #include <cstdio> ...

  8. Java 对远程文件的操作

    首先添加jar <dependency> <groupId>jcifs</groupId> <artifactId>jcifs</artifact ...

  9. textarea高度自适应自动展开

    在使用之前,推荐两个比较好的事件,分别是oninput和onpropertychange,IE9以下不兼容oninput.在textarea发生变化时,可以通过监听这两个事件来触发你需要的功能. te ...

  10. numpy 多维数组及数组操作

    NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Numpy内部解除了Python的PIL(全局解释器锁),运算效率极好,是大量机 ...