各种应用程序中获取文件路径的方法

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
http://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=466

 

用这种方法,web、控制台应用程序、Windows服务都适用

控制台应用程序:Environment.CurrentDirectory、Directory.GetCurrentDirectory()

windows服务:Environment.CurrentDirectory

windows服务安装成功后:

1. System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

2. ///

/// 获取服务应用程序的安装路径(或者当前安装目录)///

 

/// /// public static string GetWindowsServiceInstallPath(string ServiceName)

 

{

 

string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName;

 

string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString();

 

//替换掉双引号 

 

path = path.Replace("\"", string.Empty);

 

FileInfo fi = new FileInfo(path);

 

return fi.FullName;

 

//return fi.FullName.Directory.ToString();

 

}

 

//windows 服务中使用log4net

string assemblyFilePath = Assembly.GetExecutingAssembly().Location; 

 string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath); 

 string configFilePath = assemblyDirPath + "//log4net.config"; 

 DOMConfigurator.ConfigureAndWatch(new FileInfo(configFilePath));

 

      /// <summary>
        /// 获取应用程序web.config中的文件配置路径,并返回物理路径
        /// 适用于web应用程序
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string GetFileFullpath(string key)
        {
            if (string.IsNullOrEmpty(key)) return string.Empty;


            //获取应用程序的web.config中配置的路径
            string appSetting = System.Configuration.ConfigurationManager.AppSettings[key].ToString();
            //如果到的路径不是物理路径,则映射为物理路径
            if (!Path.IsPathRooted(appSetting)) appSetting = System.Web.HttpContext.Current.Server.MapPath(appSetting);


            return appSetting;
        }

 

/// <summary>
        /// 获取应用程序.config中的文件配置路径,并返回物理路径
        /// 适用于windows服务、控制台等应用程序
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string GetAssemblyPath(string key)
        {
            if (string.IsNullOrEmpty(key)) return string.Empty;


            //获取应用程序的web.config中配置的路径
            string appSetting = System.Configuration.ConfigurationManager.AppSettings[key].ToString();
            //如果到的路径不是物理路径,则映射为物理路径
            if (!Path.IsPathRooted(appSetting))
            {
                string assemblyPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
                string dirName = Path.GetDirectoryName(assemblyPath);
                if (dirName.IndexOf(@"\bin\Debug") > -1)
                    appSetting = dirName.Replace(@"\bin\Debug", appSetting.Substring(1).Replace(@"/", @"\"));
                else
                    appSetting = dirName + appSetting.Substring(1).Replace(@"/", @"\");
            }


            return appSetting;
        }

 

  /// <summary>
        /// 获取应用程序.config中的文件配置路径,并返回物理路径
        /// 适用于windows服务应用程序的成功安装之后
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string GetInstallPath(string key)
        {
            if (string.IsNullOrEmpty(key)) return string.Empty;

            //获取应用程序的web.config中配置的路径
            string appSetting = System.Configuration.ConfigurationManager.AppSettings[key].ToString();
            //如果到的路径不是物理路径,则映射为物理路径
            if (!Path.IsPathRooted(appSetting))
            {
                string processPath = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
                appSetting = processPath.Substring(0, processPath.LastIndexOf(@"\")) + appSetting.Substring(1).Replace(@"/", @"\");
            }


            return appSetting;
        }

 

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
http://cnsendnet.taobao.com
来自森大科技官方博客
http://www.cnsendblog.com/index.php/?p=466

posted on   森大科技  阅读(663)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示