zoukankan      html  css  js  c++  java
  • WebForm和WinForm取当前根目录的通用的方法[转载]

    某些环境下用 System.Web.HttpContext.Current.Server.MapPath 取不到目录。

    可以用下面两个方法:

    一,System.AppDomain.CurrentDomain.BaseDirectory.TrimEnd(new char[] { '\' })

    二,System.Web.HttpRuntime.AppDomainAppPath

    复制代码
            /// <summary>
            /// WebForm和WinForm通用的取当前根目录的方法 
            /// </summary>
            public static string BasePath
            {
                get
                {
                    System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess();
                    //WebDev.WebServer      visual studio web server
                    //xxx.vhost             Winform
                    //w3wp                  IIS7
                    //aspnet_wp             IIS6
                    string processName = p.ProcessName.ToLower();
                    if (processName == "aspnet_wp" || processName == "w3wp" || processName == "webdev.webserver")
                    {
                        if (System.Web.HttpContext.Current != null)
                            return System.Web.HttpContext.Current.Server.MapPath("~/").TrimEnd(new char[] { '\' });
                        else //当控件在定时器的触发程序中使用时就为空
                        {
                            return System.AppDomain.CurrentDomain.BaseDirectory.TrimEnd(new char[] { '\' });
                        }
                    }
                    else
                    {
                        return System.Windows.Forms.Application.StartupPath;
                    }
                }
            }
    复制代码

    另外附些以前整理的,c#中获取程序当前路径的集中方法

    复制代码
     
    string str1 =Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名。  
    string str2=Environment.CurrentDirectory;//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
    //备注 按照定义,如果该进程在本地或网络驱动器的根目录中启动,则此属性的值为驱动器名称后跟一个尾部反斜杠(如“C:”)。如果该进程在子目录中启动,则此属性的值为不带尾部反斜杠的驱动器和子目录路径(如“C:mySubDirectory”)。
    string str3=Directory.GetCurrentDirectory();//获取应用程序的当前工作目录。
    string str4=AppDomain.CurrentDomain.BaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集。
    string str5=Application.StartupPath;//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
    string str6=Application.ExecutablePath;//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
    string str7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//获取或设置包含该应用程序的目录的名称。

    1.    System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
          获取模块的完整路径。
    2.    System.Environment.CurrentDirectory
          获取和设置当前目录(该进程从中启动的目录)的完全限定目录。
    3.    System.IO.Directory.GetCurrentDirectory() 
          获取应用程序的当前工作目录。这个不一定是程序从中启动的目录啊,有可能程序放在C:www里,这个函数有可能返回C:Documents and SettingsYB\,或者C:Program FilesAdobe\,有时不一定返回什么东东,我也搞不懂了。
    4.   System.AppDomain.CurrentDomain.BaseDirectory
          获取程序的基目录。
    5.   System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
          获取和设置包括该应用程序的目录的名称。
    6.   System.Windows.Forms.Application.StartupPath 
          获取启动了应用程序的可执行文件的路径。效果和2、5一样。只是5返回的字符串后面多了一个""而已
    7.   System.Windows.Forms.Application.ExecutablePath
          获取启动了应用程序的可执行文件的路径及文件名,效果和1一样。 
    复制代码
  • 相关阅读:
    JRE、JDK和JVM之间的关系
    操作系统——CPU、计算机的构成
    为什么要用Java泛型
    【docker】 centos7 下 使用docker 安装 LNMP
    【docker】 centos7 安装docker
    【laravel5.6】 IlluminateDatabaseQueryException : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
    【truffle】Error: `truffle init` no longer accepts a project template name as an argument.
    【宝塔面板】pm2 安装没反应问题
    【node.js】】MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。
    【git】 linux 环境安装git
  • 原文地址:https://www.cnblogs.com/mingjing/p/6096636.html
Copyright © 2011-2022 走看看