C#获取相对路径[转]
C#最常使用的相对路径是从当前程序所在路径开始相对寻径,找到要找的路径,即以下两种最简单的方式:
1. 程序根目录.(即exe程序所在路径)
//下面两个路径是等价的,都是exe程序所在路径(通常是bin\Debug\下)的Data文件夹下的test文本文件
string Path1 = @".\Data\test.txt";
string Path2 = @"Data\test.txt";
2. 上级目录..
string Path3 = @"..\Data\test.txt"; //程序根目录的上级目录(通常是bin\下)的Data文件夹下的test文本文件
string Path4 = @"..\..\Data\test.txt"; //程序根目录的上两级目录(通常是程序名\下)的Data文件夹下的test文本文件
当然,C#还可以靠指定的方式获得相对路径。应用VS2010创建了一WinForm项目,项目名为RelativePath,放在桌面上。编写代码通过八种特定方式获取相对路径并输出显示,运行效果如下:
下面简要的介绍一下这八种获得相对路径的方式:
1. 获取和设置当前目录(该进程从中启动的目录)的完全限定路径
string str1 = System.Environment.CurrentDirectory; //Result: C:xxxxxx
2. 获取应用程序的当前工作目录
string str2 = System.IO.Directory.GetCurrentDirectory(); //Result: C:xxxxxx
这个不一定是程序从中启动的目录啊,有可能程序放在C:\xxx里,这个函数有可能返回C:\Documents and Settings\WSY\,或者C:\Program Files\Adobe\,有时不一定返回什么东西,这是程序最后一次操作过的目录,比如你用Word打开了E:\doc\my.doc这个文件,此时执行这个方法就返回了E:\doc了。
3. 获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称
string str3 = System.Windows.Forms.Application.StartupPath; //Result: C:xxxxxx
4. 获取启动了应用程序的可执行文件的路径,包括可执行文件的名称
string str4 = System.Windows.Forms.Application.ExecutablePath; //Result: C:xxxxxxxxx.EXE
5. 获取当前 Thread 的当前应用程序域的基目录,它由程序集冲突解决程序用来探测程序集
string str5 = System.AppDomain.CurrentDomain.BaseDirectory; //Result: C:xxxxxx
6. 获取和设置包含该应用程序的目录的名称
string str6 = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase; //Result: C:xxxxxx
7. 获取当前进程的完整路径,包含文件名
string str7 = this.GetType().Assembly.Location; //Result: C:xxxxxxxxx.exe
8. 获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名
string str8 = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; //Result: C:xxxxxxxxx.vshost.exe
此外,更多见的通过XML文件配置具体的路径来达到合理的规划配置文件的具体存放位置,如WEB中的配置文件中的路径
string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"moduleM3ExampleMuColor.txt";
StreamReader smRead = new StreamReader(path, System.Text.Encoding.Default); //设置路径
饮水思源,不忘初心。
要面包,也要有诗和远方。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了