C# 获取当前运行路径的6种实用方法

C# 获取当前运行路径的多种方法

在C#中,获取当前运行路径(即程序的工作目录)是常见的需求,尤其在处理文件读写、日志记录和配置文件时。不同的场景可能需要使用不同的方法来获取路径。本文将介绍几种常用的获取当前运行路径的方法。

方法一:Environment.CurrentDirectory

Environment.CurrentDirectory 属性返回应用程序当前的工作目录。默认情况下,它通常是应用程序启动时所在的目录。

string currentDirectory = Environment.CurrentDirectory;
Console.WriteLine("当前工作目录:" + currentDirectory);
适用场景:
  • 获取当前工作目录,通常用于文件操作。
  • 在控制台应用程序中,工作目录通常是应用程序启动的路径。
注意事项:
  • 在某些情况下,工作目录可能会发生变化(例如,通过命令行改变了工作目录),所以它返回的是当前的工作目录,而非应用程序的安装目录。

方法二:AppDomain.CurrentDomain.BaseDirectory

AppDomain.CurrentDomain.BaseDirectory 返回应用程序的基本目录路径,即应用程序的根目录,通常是应用程序启动时所在的目录。

string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
Console.WriteLine("应用程序根目录:" + baseDirectory);
适用场景:
  • 获取应用程序的安装目录,通常用于定位应用程序所在的目录,例如读取配置文件或程序集等。
  • 在任何类型的应用程序(如桌面、Web)中都可以使用。
注意事项:
  • 对于.NET Core和.NET 5+应用程序,BaseDirectory 返回的是运行时环境下的路径,而对于.NET Framework,它通常指的是可执行文件所在的路径。

方法三:Assembly.GetExecutingAssembly().Location

Assembly.GetExecutingAssembly().Location 获取当前执行的程序集的路径,它返回的是包含当前执行代码的程序集文件的完整路径。

using System.Reflection;

string assemblyLocation = Assembly.GetExecutingAssembly().Location;
Console.WriteLine("当前程序集路径:" + assemblyLocation);
适用场景:
  • 获取当前运行的程序集的路径,适用于需要知道程序集位置的场景。
  • 如果程序集被打包为单个文件(如EXE文件),则返回的是EXE文件的路径。
注意事项:
  • 返回的路径包含文件名,通常需要通过Path.GetDirectoryName来获取目录路径。

方法四:Path.GetDirectoryName(Application.ExecutablePath)

对于Windows Forms 或 WPF 应用程序,可以使用 Application.ExecutablePath 来获取当前应用程序的完整路径,再使用 Path.GetDirectoryName 获取其所在目录。

using System;
using System.IO;
using System.Windows.Forms;

string executableDirectory = Path.GetDirectoryName(Application.ExecutablePath);
Console.WriteLine("应用程序执行路径:" + executableDirectory);
适用场景:
  • 获取应用程序的执行路径,常用于Windows桌面应用程序。
注意事项:
  • 该方法仅在Windows Forms和WPF应用程序中有效,Application类是这些应用程序的一个特性。

方法五:Directory.GetCurrentDirectory()

Directory.GetCurrentDirectory() 获取当前应用程序的工作目录,与 Environment.CurrentDirectory 类似,不过它是通过System.IO.Directory类来调用的。

string currentDir = Directory.GetCurrentDirectory();
Console.WriteLine("当前目录:" + currentDir);
适用场景:
  • Environment.CurrentDirectory 功能相同,适用于需要操作当前工作目录的场景。

方法六:Path.Combine 组合路径

有时我们需要将路径与其他目录或文件名组合起来。此时可以使用 Path.Combine 来安全地连接路径字符串。

string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.txt");
Console.WriteLine("完整路径:" + path);
适用场景:
  • 需要根据已知的目录生成完整路径时,尤其是在多平台环境下,Path.Combine 能自动处理不同的路径分隔符。

总结

在C#中获取当前运行路径有多种方法,选择合适的方式取决于应用程序的类型和需求。以下是几种常见的选择场景:

  • Environment.CurrentDirectory:通常用于控制台应用程序,获取工作目录。
  • AppDomain.CurrentDomain.BaseDirectory:适用于获取应用程序的基本目录,适用于所有类型的应用程序。
  • Assembly.GetExecutingAssembly().Location:适用于需要获取程序集路径的情况。
  • Path.GetDirectoryName(Application.ExecutablePath):适用于Windows桌面应用程序(如Windows Forms/WPF)。
  • Directory.GetCurrentDirectory():功能与 Environment.CurrentDirectory 类似,适用于文件操作。

根据实际需要选择适合的方法,能帮助你更高效地处理路径问题。


这篇博客展示了获取当前路径的多种方式,希望能帮助你根据项目需求做出选择。如果有其他问题或想了解更多,请随时留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/954051.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Postman 接口测试平替工具,可视化开发省事!

在软件开发的漫长旅程中,接口测试工具一直是开发者的得力助手。Postman 作为全球知名的接口测试工具,长期占据市场主导地位。然而,随着国产工具的崛起,越来越多的开发者开始寻找更适合中国开发者的替代方案。一款 Apifox&#xff…

代码随想录算法训练营day20(0113)

1.二叉搜索树的最近公共祖先 在上次做完二叉树的最近公共祖先后,此题就显得比较简单了。不过要拓展一下,因为二叉搜索树有一些特性的,可以更加方便的解题。 题目 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节…

使用C# CEFSharp在WPF中开发桌面程序实现同一网站多开功能

在网络商业运营领域,同时运营多个淘宝店铺的现象屡见不鲜。为了满足这一需求,实现同一网址的多开功能变得尤为关键。这一需求虽然实用,但实现起来却面临诸多挑战。在这个过程中,技术人员们也经历了不少喜怒哀乐。 开发经历回顾 …

Shell 经典面试例题

1.shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容,不存在则创建一个文件将创建时间写入。 编写脚本: #!/bin/bash FILE"/tmp/size.log" if [ -f "$FILE" ]; then echo "文件存在,显示文件内容&…

移动云自研云原生数据库入围国采!

近日,中央国家机关2024年度事务型数据库软件框架协议联合征集采购项目产品名单正式公布,移动云自主研发的云原生数据库产品顺利入围。这一成就不仅彰显了移动云在数据库领域深耕多年造就的领先技术优势,更标志着国家权威评审机构对移动云在数…

Centos 宝塔安装

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 安装成功界面 宝塔说明文档 https://www.bt.cn/admin/servers#wcu 或者可以注册宝塔账号 1 快速部署 安装docker 之后 2 需要在usr/bin下下载do…

ros2笔记-6.2 使用urdf创建机器人模型

本节主要跟着小鱼老师的视频操作,不同的仿真平台有不同的建模语言,但是几乎都支持URDF。 本节使用URDF创建一个机器人模型。 6.2.1 帮机器人创建一个身体 URDF使用XML来描述机器人的结构和传感器、执行器等信息。 在chapt6/chap6_ws/src创建功能包:r…

文章复现—面向配电网韧性提升的移动储能预布局与动态调度策略

目录 一、主要内容: 二、实际运行效果: 三、文章介绍: 四、完整代码数据下载: 一、主要内容: (matlab代码)该程序复现《面向配电网韧性提升的移动储能预布局与动态调度策略》,具…

【ASP.NET学习】Web Forms创建Web应用

文章目录 什么是 Web Forms?ASP.NET Web Forms - HTML 页面用 ASP.NET 编写的 Hello RUNOOB.COM它是如何工作的?经典 ASP ASP.NET Web Forms - 服务器控件经典 ASP 的局限性ASP.NET - 服务器控件ASP.NET - HTML 服务器控件ASP.NET - Web 服务器控件ASP.N…

python-leetcode-旋转图像

48. 旋转图像 - 力扣(LeetCode) class Solution:def rotate(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""n len(matrix)# 矩阵转置for i in range(n):for…

GPT 系列论文精读:从 GPT-1 到 GPT-4

学习 & 参考资料 前置文章 Transformer 论文精读 机器学习 —— 李宏毅老师的 B 站搬运视频 自监督式学习(四) - GPT的野望[DLHLP 2020] 來自猎人暗黑大陆的模型 GPT-3 论文逐段精读 —— 沐神的论文精读合集 GPT,GPT-2,GPT-3 论文精读【论文精读】…

《计算机网络》课后探研题书面报告_了解PPPoE协议

PPPoE协议的工作原理与应用分析 摘 要 PPPoE(Point-to-Point Protocol over Ethernet)是一种广泛应用于宽带接入的网络协议,特别是在DSL(数字用户线路)和光纤网络中具有重要的应用价值。PPPoE结合了PPP协议的认证、加…

玩转大语言模型——langchain调用ollama视觉多模态语言模型

系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 langchain调用ollama视觉多模态语言模型 系列文章目录前言使用Ollama下载模型查找模型下载模型 测试模型ollama测试langchain测试加载图片加载模型…

开始使用Panuon开源界面库环境配置并手写VS2019高仿界面

1. Panuon环境配置 1.1. 通过Nuget 安装 Panuon.WPF.UI1.2. xaml引用命名空间1.3. using Panuon.WPF.UI; 2. VS2019 view 2.1. 设置窗体尺寸和title2.2. 添加静态资源 2.2.1. 什么是静态资源 2.3. 主Grid 2.3.1. 盒子模型2.3.2. 嵌套布局 3. 总结 1. Panuon环境配置 1.1. 通…

[Git] 深入理解 Git 的客户端与服务器角色

Git 的一个核心设计理念是 分布式,每个 Git 仓库都可以既是 客户端,也可以是 服务器。为了更好地理解这一特性,我们通过一个实际的 GitHub 远程仓库和本地仓库的场景来详细说明 Git 如何在客户端和服务器之间协作,如何独立地进行版…

基于考研概率论知识解读 Transformer:为何自注意力机制要除以根号 dk

Transformer自注意力机制中除以 d k \sqrt{d_k} dk​ ​深度剖析 【 Transformer 系列,故事从 d k \sqrt{d_k} dk​ ​说起】 LLM这么火,Transformer厥功甚伟,某天心血来潮~,再去看看! 它长这个样子: 深入…

使用 selenium-webdriver 开发 Web 自动 UI 测试程序

优缺点 优点 有时候有可能一个改动导致其他的地方的功能失去效果,这样使用 Web 自动 UI 测试程序可以快速的检查并定位问题,节省大量的人工验证时间 缺点 增加了维护成本,如果功能更新过快或者技术更新过快,维护成本也会随之提高…

【Redis】初识分布式系统

目录 单机架构 分布式系统 应用数据分离架构 应用服务集群架构 读写分离/主从分离架构 冷热分离架构 垂直分库 微服务架构 分布式名词概念 本篇博文,将根据分布式系统的演进一步一步介绍每一种架构的形式,最后为大家总结了一些分布式中常用的…

微服务之松耦合

参考:https://microservices.io/post/architecture/2023/03/28/microservice-architecture-essentials-loose-coupling.html There’s actually two different types of coupling: runtime coupling - influences availability design-time coupling - influences…

pytest+request+yaml+allure搭建低编码调试门槛的接口自动化框架

接口自动化非常简单,大致分为以下几步: 准备入参调用接口拿到2中response,继续组装入参,调用下一个接口重复步骤3校验结果是否符合预期 一个优秀接口自动化框架的特点: 【编码门槛低】,又【能让新手学到…