C# 获取项目下文件夹路径

C# 获取项目下文件夹路径,第1张

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

实际运行的程序是没有所谓项目的概念的(不可能把源代码也复制过去吧?!),也就是说,你的应用程序运行时的目录下一开始是不会自动地产生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;

}

我没有设置关联,只是把文件拖到程序文件上打开,应该是一样的。

主要是看程序启动时的命令行参数MyApplicationCommandLineArgs,里面包括要打开的文件路径。

在Sub Main 或者 启动窗口的Load事件里添加代码

If MyApplicationCommandLineArgsCount > 0 AndAlso MyComputerFileSystemFileExists(MyApplicationCommandLineArgs(0)) Then‘参数不为空且文件存在

Dim s As New IOStreamReader(MyApplicationCommandLineArgs(0))

MsgBox(sReadToEnd)

End If

你还可以处理更多的命令行参数。

关于命令行参数>

取得控制台应用程序的根目录方法 方法1、EnvironmentCurrentDirectory 取得或设置当前工作目录的完整限定路径

方法2、AppDomainCurrentDomainBaseDirectory 获取基目录,它由程序集冲突解决程序用来探测程序集

取得WinForm应用程序的根目录方法 1、EnvironmentCurrentDirectoryToString();//获取或设置当前工作目录的完全限定路径

2、ApplicationStartupPathToString();//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称

3、DirectoryGetCurrentDirectory();//获取应用程序的当前工作目录

4、AppDomainCurrentDomainBaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集

5、AppDomainCurrentDomainSetupInformationApplicationBase;//获取或设置包含该应用程序的目录的名称

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的引用后使用

VB2008测试通过 Imports System Imports SystemIO Imports SystemThreading Imports SystemWindowsForms\x0d\ Public Class FrmMain\x0d\\x0d\Dim newSearcher As getFileByName\x0d\\x0d\ Private Sub FrmMain_Load(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles MyBaseLoad\x0d\\x0d\rballChecked = True\x0d\\x0d\tbpathText = ""\x0d\\x0d\tbpathEnabled = False\x0d\\x0d\btndlgEnabled = False\x0d\\x0d\End Sub\x0d\\x0d\ Private Sub btnOK_Click(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles btnOKClick\x0d\\x0d\tvNodesClear()\x0d\\x0d\btnOKEnabled = False\x0d\\x0d\btnExitEnabled = False\x0d\\x0d\If rballChecked Then\x0d\\x0d\run()\x0d\\x0d\Else\x0d\\x0d\If tbpathText = "" Then\x0d\\x0d\MsgBox("请输入或者选择一个路径")\x0d\\x0d\Exit Sub\x0d\\x0d\Else\x0d\\x0d\run(tbpathText)\x0d\\x0d\End If\x0d\\x0d\End If\x0d\\x0d\End Sub\x0d\\x0d\ Private Sub btndlg_Click(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles btndlgClick\x0d\\x0d\fbdlgRootFolder = EnvironmentSpecialFolderMyComputer\x0d\\x0d\fbdlgShowDialog()\x0d\\x0d\tbpathText = fbdlgSelectedPath\x0d\\x0d\End Sub\x0d\\x0d\ Private Sub rbchs_CheckedChanged(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles rbchsCheckedChanged\x0d\\x0d\If rbchsChecked = True Then\x0d\\x0d\tbpathEnabled = True\x0d\\x0d\btndlgEnabled = True\x0d\\x0d\Else\x0d\\x0d\tbpathEnabled = False\x0d\\x0d\btndlgEnabled = False\x0d\\x0d\End If\x0d\\x0d\End Sub\x0d\\x0d\ Private Sub run()\x0d\\x0d\If tbfileNameText = "" Then\x0d\\x0d\MsgBox("请输入文件名称")\x0d\\x0d\btnOKEnabled = True\x0d\\x0d\btnExitEnabled = True\x0d\\x0d\Exit Sub\x0d\\x0d\Else\x0d\\x0d\newSearcher = New getFileByName(tbfileNameText)\x0d\\x0d\newSearcherGetDrivers()\x0d\\x0d\tmrEnabled = True\x0d\\x0d\tmrInterval = 10\x0d\\x0d\End If\x0d\\x0d\End Sub\x0d\\x0d\ Private Sub run(ByVal path As String)\x0d\\x0d\If tbfileNameText = "" Then\x0d\\x0d\MsgBox("请输入文件名称")\x0d\\x0d\btnOKEnabled = True\x0d\\x0d\btnExitEnabled = True\x0d\\x0d\Exit Sub\x0d\\x0d\Else\x0d\\x0d\newSearcher = New getFileByName(tbfileNameText)\x0d\\x0d\newSearcherSearchFolder(path)\x0d\\x0d\tmrEnabled = True\x0d\\x0d\tmrInterval = 50\x0d\\x0d\End If\x0d\\x0d\End Sub\x0d\\x0d\ Private Sub tmr_Tick(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles tmrTick\x0d\\x0d\LblshowText = newSearchercurrentPath\x0d\\x0d\If newSearchercntThread = 0 And newSearcherisDone Then\x0d\\x0d\'MsgBox(newSearchergetFileToString)\x0d\\x0d\'MsgBox("全部线程结束")\x0d\\x0d\For Each Str As String In newSearchergetFile\x0d\\x0d\tvNodesAdd(Str)\x0d\\x0d\Next\x0d\\x0d\'For i As Integer = 0 To newSearchergetFileLength - 1\x0d\\x0d\'tvNodesAdd(newSearchergetFile(i))\x0d\\x0d\'Next\x0d\\x0d\tmrEnabled = False\x0d\\x0d\btnExitEnabled = True\x0d\\x0d\btnOKEnabled = True\x0d\\x0d\End If\x0d\\x0d\MyApplicationDoEvents()\x0d\\x0d\End Sub\x0d\\x0d\ Private Sub btnExit_Click(ByVal sender As SystemObject, ByVal e As SystemEventArgs) Handles btnExitClick\x0d\\x0d\MeClose()\x0d\\x0d\End Sub End Class

获取文件名方法:用SystemIOPathGetFileName和SystemIOPathGetFileNameWithoutExtension(无扩展名)的方法获取文件路径方法://获取当前进程的完整路径,包含文件名(进程名)。 string str = thisGetType()AssemblyLocation;

result: X:\xxx\xxx\xxxexe (exe文件所在的目录+exe文件名)//获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。

string str = SystemDiagnosticsProcessGetCurrentProcess()MainModuleFileName;

result: X:\xxx\xxx\xxxexe (exe文件所在的目录+exe文件名)//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。

string str = SystemEnvironmentCurrentDirectory;

result: X:\xxx\xxx (exe文件所在的目录)//获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集。

string str = SystemAppDomainCurrentDomainBaseDirectory;

result: X:\xxx\xxx\ (exe文件所在的目录+”\”)//获取和设置包含该应用程序的目录的名称。

string str = SystemAppDomainCurrentDomainSetupInformationApplicationBase;

result: X:\xxx\xxx\ (exe文件所在的目录+”\”)//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。

string str = SystemWindowsFormsApplicationStartupPath;

result: X:\xxx\xxx (exe文件所在的目录)//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。

string str = SystemWindowsFormsApplicationExecutablePath;

result: X:\xxx\xxx\xxxexe (exe文件所在的目录+exe文件名)//获取应用程序的当前工作目录(不可靠)。

result: X:\xxx\xxx (exe文件所在的目录)

以上就是关于C# 获取项目下文件夹路径全部的内容,包括:C# 获取项目下文件夹路径、vb.net文件关联后获取文件路径、WinForm 几种获得应用程序启动路径的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/web/9336898.html

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

发表评论

登录后才能评论

评论列表(0条)

保存