C#、ASP.NET获取当前应用程序的绝对路径,获取程序工作路径 (转帖)

C#、ASP.NET获取当前应用程序的绝对路径,获取程序工作路径

============================================

使用 Application.StartupPath

至于 
System.IO.Directory.GetCurrentDirectory不行,因为应用程序有个当前工作目录,这个工作目录是会变的,不总是程序的启动目录(当然默认启动是应用程序目录)。 
比如说,你打开命令行(cmd),它就会显示一个路径,你会发现这个路径(通常是 C:/Documents and settings/用户名,在XP下)不是cmd.exe所在目录(cmd.exe 是在system32下的)。 
而这个当前目录很容易改变,甚至当你使用了文件浏览对话框(比如打开文件、保存文件)时,这个当前目录都会改变到它最后选择的目录。

而快捷方式中的启动目录,就是设置当前应用程序的工作目录。默认情况下,新建的快捷方式的启动目录就是应用程序所在目录,所以你不修改的话是可以正常工作的,明白了

进程对象在.NET中表现为System.Diagnostics.Process类,通过调用Process.GetCurrentProcess().MainModule.FileName可获得当前执行的exe的文件名。但是这个方法得到的仅仅是文件名,如果程序运行期间没有切换工作目录,那么可以调用System.IO.Path的方法获取绝对路径。但是当前目录同样可以通过Environment.CurrentDirectory获得,而且很多软件在使用Open Dialog打开文件的时候,都会切换工作目录,而使得这一机制失效。

如果是在Windows Forms应用程序中,当前应用也表现为System.Windows.Forms.Application对象,通过其静态属性Application.ExecutablePath和Application.StartupPath,可以取得可执行文件的路径和启动路径。

但如果不是在Windows应用中呢,或者是在Library中呢,就算是Application对象的属性依然能获得,也需要在工程中添加System.Windows.Forms这个Assembly的引用,非常不方便。这个时候,可以通过Assembly的静态方法,GetCallingAssembly或者GetExecutingAssembly取得当前执行的Assembly,然后通过Assembly类的Location获取assembly的位置。

但是使用Assembly的时候,可能会遇到权限方面的问题,同时Assembly.GetCallingAssembly或者Assembly.GetExecutingAssembly有可能得到的不是.exe文件的位置。在GAC中的添加了强名的Assembly,运行时是可以不必与.exe在同一目录的。

.NET的进程启动时,会创建AppDomain,所有的Assembly都被Load到某一个AppDomain中,而AppDomain中提供了SetupInformation属性,可以获取AppDomain启动时的一些信息,因此,可以通过调用AppDomain.CurrentDomain.SetupInformation.ApplicationBase获取当前应用程序所在的路径。

在通过以上方法取到所需的目录后,可以调用System.IO.Path的方法获取文件名,目录名,绝对路径等。停止对路径字符串的分析,而改用System.IO.Path类吧。

开发.NET下应用程序时,了解Process/Application->AppDomain->Assembly的关系,对于实现正确的逻辑,是非常有帮助的。

// 获取程序工作路径的 n 种方法。
string tmp = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
tmp = System.Environment.CurrentDirectory;
tmp = System.IO.Directory.GetCurrentDirectory();
tmp = System.Windows.Forms.Application.StartupPath;
tmp = System.Windows.Forms.Application.ExecutablePath;
//针对网站应用程序有效的 m 种方法。
tmp = System.AppDomain.CurrentDomain.BaseDirectory;
tmp = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
tmp = HttpContext.Current.Request.PhysicalApplicationPath;

AppDomain.CurrentDomain.SetupInformation.ApplicationBase此方法可使用在ASP.NET中取代Page.Server.MapPath(),可以说这个获取路径的方法是.NET通用的获取路径方法,建议使用。

C#、ASP.NET获取当前应用程序的绝对路径,获取程序工作路径 (转帖)

时间: 2024-10-26 20:58:35

C#、ASP.NET获取当前应用程序的绝对路径,获取程序工作路径 (转帖)的相关文章

Asp.net项目路径获取方法【转】

获取项目完整的绝对路径string path = System.AppDomain.CurrentDomain.BaseDirectory.ToString();string path = Server.MapPath(".");//此"."可以换成项目文件里的其它文件夹名称 输出asp.net 网站路径private void responseHtml() {        System.Text.StringBuilder sb = new System.Tex

ASP教程:Global.asa文件的使用及Chat程序

在上一篇中作者给大家详细介绍了两个非常实用的 ASP 内建对象 Application 和 Session 的使用方法.由于这两者的 OnStart.OnEnd 事件的脚本都必须在 Global.asa 文件中声明 , 因此,本篇将给大家详细介绍 Global.asa 文件的使用方法.为使大家熟练掌握至今所学过的知识,本篇还将举出一个 ASP 的 Chat 程序,供各位参考. 最近很多朋友来信问我,为什么前两期的范例程序运行时有这样那样的错.首先,我要向大家声明,这些程序都是我自己写的,在出“厂

Qt程序关于路径、用户目录路径、临时文件夹位置获取方法

比如我们有一个程序在: C:/Qt/examples/tools/regexp/regexp.exe 1. 程序所在目录 QString QCoreApplication::applicationDirPath() 那么 qApp->applicationDirPath() 的结果是: 输出:C:/Qt/examples/tools/regexp 2. 程序的完整名称.那么可以这么写: qApp->applicationFilePath() 输出:C:/Qt/examples/tools/re

c# winform 获取当前程序运行根目录,winform 打开程序运行的文件夹

// 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName // 获取和设置当前目录(该进程从中启动的目录)的完全限定目录. System.Environment.CurrentDirectory // 获取应用程序的当前工作目录. System.IO.Directory.GetC

Asp.net 在配置Microsoft Excel、Microsoft Word应用程序权限时 error: 80070005 和8000401a 的问题

Asp.net 在配置Microsoft Excel.Microsoft Word应用程序权限时 error: 80070005 和8000401a 的解决总 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005. 控制面板->管理工具->组件服务->计算机->我的电脑->DCom配置->找到Microsoft Word文档之后单击属性打开此应用程序的属

请给出程序,功能为获取“一段程序代码”运行时长

有一天看到了几个java题目,我就写了一下,废话少说,直接上代码了 3.已知int型数组arr[t], 请:① 打印该数组.输出格式为:[arr1,arr2,arr3,...]. ② 输出数组的最大值max与最小值min. ③ 使用冒泡排序对数组进行排序,并打印排序后数组. 4. 请给出程序,功能为获取“一段程序代码”运行时长.要求: ① 程序框架在父类中定义. ② “一段程序代码”在子类中给出,并覆盖父类中对应方法. ③ “一段程序代码”为:打印一个由“*”组成的图形,见图1. 图1 第三题:

asp.net 客户端上传文件全路径获取方法

asp.net  获取客户端上传文件全路径方法: eg:F:\test\1.doc 基于浏览器安全问题,浏览器将屏蔽获取客户端文件全路径的方法,只能获取到文件的文件名,如果需要获取全路径则需要另想其他方法 如下提供两种方法: 方法1:工具 -> Internet选项 -> 安全 -> 自定义级别 -> 找到“其他”中的“将本地文件上载至服务器时包含本地目录路径”,选中“启用”即可. 方法2: function getPath() { //获取file 控件对象 var obj =

应用程序 /dev/rtc 编程 获取时间 2011-12-13 01:01:06【转】

本文转载自:http://blog.chinaunix.net/uid-16785183-id-3040310.html 分类: 原文地址:应用程序 /dev/rtc 编程 获取时间 作者:yuweixian4230 找的一些rtc资料: 系统时钟硬件与LINUX时间表示二 之 Linux内核对RTC的编程 S3C2440上RTC时钟驱动开发实例讲解 linux 实时时钟(RTC)驱动 linux RTC 驱动模型分析 ubuntu10.10 /dev/rtc 功能: 简单操作,打开/dev/r

微信小程序编译包的获取与解压还原1——在手机中获取小程序编译包wxapkg

准备工作: 微信关注需要下载编译包的小程序,然后点进去看一下,微信就会自动下载相应的编译包到手机上了. 获取小程序编译包: 据说root手机可以直接在手机的文件管理中查找wxapkg文件,自己尝试了下,无法通过搜索查找到,对应的文件夹路径也找不到相关文件,所以这里就采用比较通用的方法来获取了. 大部分智能手机都有备份功能,这样就可以在手机重装系统或恢复出厂设置之后快速恢复手机应用和数据.对的,就是这个手机备份功能,当你对一个应用进行备份的时候,除了应用本身,应用的数据也会直接被备份下来.微信也不