winform程序获取根目录

winform程序获取根目录,第1张

关于你这个问题,我建议你在配置文件中动态指定此路径否则

你的程序如果打包的话,该路径为 \img\ajpg

如果在DEBUG的情况下,该路径为 \\img\ajpg

string path = "";

//存

ApplicationUserAppDataRegistrySetValue("path", path);

 

 

 

//读

string s = ApplicationUserAppDataRegistryGetValue("path") as string;

//假定这个文件是叫file,用

string path=PathGetDirectoryName(file);

//就可以得到它的目录

//如果再继续用

string parent=PathGetDirectoryName(path+@"\");

就可以得到它的上级目录。

1 SystemDiagnosticsProcessGetCurrentProcess()MainModuleFileName

-获取模块的完整路径。

2SystemEnvironmentCurrentDirectory

-获取和设置当前目录(该进程从中启动的目录)的完全限定目录。

3SystemIODirectoryGetCurrentDirectory()

-获取应用程序的当前工作目录。这个不一定是程序从中启动的目录啊,

4SystemAppDomainCurrentDomainBaseDirectory

-获取程序的基目录。

5SystemAppDomainCurrentDomainSetupInformationApplicationBase

-获取和设置包括该应用程序的目录的名称。

6 SystemWindowsFormsApplicationStartupPath

-获取启动了应用程序的可执行文件的路径。效果和2、5一样。只是5返回的字符串后面多了一个"\"而已

7SystemWindowsFormsApplicationExecutablePath

-获取启动了应用程序的可执行文件的路径及文件名,效果和1一样。

对于Windows程序 和Web 应用程序来说,他们运行的路径是不一样的,所以关键是判断当前运行的程序是哪种程序于是我们可以使用如下的代码

string path = "";

if (SystemEnvironmentCurrentDirectory ==AppDomainCurrentDomainBaseDirectory)//Windows应用程序则相等

{

path = AppDomainCurrentDomainBaseDirectory;

}

else

{

path = AppDomainCurrentDomainBaseDirectory + "Bin\";

}

这样如果我们写了一个类库,类库中用到了AssemblyLoadFrom,由于是通用类库,所以可能用到Windows程序中也可能用到Web中,那么用上面的代码就很方便了

1、ServerMapPath

2、SystemWindowsFormsStartupPath

3、TypeAssemblyLocation

方法2可以应用于控制台应用程序,WinForm应用程序,Windows服务,方法1可以应用于Web应用程序,方法3都可以应用。

但方法3是加载应用程序的路径。如果是Web应用程序,取得的路径是:C:\WINDOWS\MicrosoftNET\Framework\v114322\Temporary ASPNET Files目录。所以Web项目还是使用ServerMapPath吧。否则建议使用方法2。如果自己新建类库。可以加入对SystemWindowsFormsStartupPath的引用后使用

给你几个获取应用程序目录的方法:

SystemEnvironmentCurrentDirectory

获取和设置当前目录(该进程从中启动的目录)的完全限定目录。

SystemIODirectoryGetCurrentDirectory()

获取应用程序的当前工作目录。

SystemAppDomainCurrentDomainBaseDirectory

获取程序的基目录。

SystemAppDomainCurrentDomainSetupInformationApplicationBase

获取和设置包括该应用程序的目录的名称。

SystemWindowsFormsApplicationStartupPath

获取启动了应用程序的可执行文件的路径

你没有理解项目和程序的区别。

实际运行的程序是没有所谓项目的概念的(不可能把源代码也复制过去吧?!),也就是说,你的应用程序运行时的目录下一开始是不会自动地产生ClientPhoto这个文件夹的(除非你在项目里将这个文件夹中的文件设置为“复制到输出目录”。)

所以你要做的,第一件事就是先获取应用程序的路径,然后判断这个路径下的目录存在不存在,如果不存在,要首先创建一个。

我们知道“ClientPhoto”其实只是一个相对路径而已,要获得绝对路径,首先要知道应用程序当前的绝对路径:只需要检索SystemWindowsFormsApplicationStartupPath这个属性即可。

string path = SystemWindowsFormsApplicationStartupPath;

然后将应用程序当前路径path和字符串“ClientPhoto”组合成为一个完整的文件夹绝对路径folder(这时候就是绝对路径了,但是,还没完!)。

string folder = SystemIOPathCombine(path, "ClientPhoto");

接着判断 folder 指定的文件夹是否存在。

bool folderExists = SystemIODirectoryExists(folder);

如果文件夹不存在,则创建它。如果创建不了,会引发异常,请自行捕捉这个异常。

if(!folderExists)

{

    SystemIODirectoryCreateDirectory(folder);

}

最后才返回路径 folder。

完整代码:

private string GetFolderPath()

{

    string folder = PathCombine(ApplicationStartupPath, "ClientPhoto");

    if(!DirectoryExists(folder))

    {

        DirectoryCreateDirectory(folder);

    }

    return folder;

}

using SystemDiagnostics;

SystemDiagnosticsProcessStart("excelexe")

例:

ProcessStart("excelexe","filenamexls");

Start(可执行文件路径,参数文件名)

可执行文件路径换成电脑上Excel的可执行文件位置就可以了(可读取注册表信息获取)

以上就是关于winform程序获取根目录全部的内容,包括:winform程序获取根目录、C# winform 如何存储用户选择的文件路径 下次启动时读取该路径、Winform 如何获取指定文件的目录及上级目录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9621407.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存