【C#】学习获取程序执行路径,Gemini 帮助分析

一、前言:

        在Delphi中,如果想要获取当前执行程序的目录,程序代码如下:

ExtractFilePath(ParamStr(0));

        今天在分析一个别人做的C#程序时看到了一段C#代码,意思是获取执行程序所在的文件目录:

public static string GetAssemblyDirectory()
{
    var codeBaseUrl = Assembly.GetExecutingAssembly().CodeBase;
    var filePathToCodeBase = new Uri(codeBaseUrl).LocalPath;
    var directoryPath = Path.GetDirectoryName(filePathToCodeBase);
    return directoryPath;
}

通过 Gemini 分析的结果如下:

解释:

1. 函数定义:
  • public: 该关键字使同一程序集(项目)中的任何其他代码都能访问该函数。
  • static:静态: 该关键字表示该函数是静态方法,这意味着调用该函数时无需创建包含该函数的类的实例。
  • string:字符串: 指定函数的返回类型,本例中为字符串。
  • GetAssemblyDirectory(): 这是函数本身的名称。
2. 获取程序的代码集:
  • Assembly.GetExecutingAssembly(): 此行将检索当前正在执行代码的程序集的相关信息。
  • CodeBase: 程序集对象的这一属性可获取主程序集文件(通常是 .exe 文件)的位置。返回值是一个类似 URL 的字符串。
3. 将代码库转换为本地路径:
  • new Uri(codeBaseUrl): 这一行根据 codeBaseUrl 字符串创建 Uri 对象。Uri 对象可以表示不同类型的地址,包括 URL 和文件路径。
  • LocalPath: Uri 对象的这一属性可从类似 URL 的字符串中提取本地文件路径部分。
4. 提取目录路径:
  • Path.GetDirectoryName(filePathToCodeBase): 该行使用了 System.IO 命名空间中的 Path.GetDirectoryName 静态方法。它将 filePathToCodeBase 字符串作为输入,并返回该路径所代表文件的目录路径。
5. 返回目录路径:
  • return directoryPath: 这一行返回函数结果中提取的目录路径(directoryPath)。
6. 总结:

        GetAssemblyDirectory() 函数用于检索当前执行的程序集(.exe 文件)所在的目录。这是访问与主程序存储在同一目录下的资源或配置文件的有用方法
 

附加说明:

        当程序从临时位置或网络驱动器执行时,该功能尤其有用。检索到的目录路径可用于查找与程序相关的其他文件,如配置文件、数据文件或库。

二、在 C# 中,有几种方法可以获取当前执行程序的目录: 

1. 使用 System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 属性:

        此属性获取当前进程的主模块的完整路径,包括文件名。主模块通常是程序的执行文件。

string path = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
Console.WriteLine(path);

2. 使用 System.Environment.CurrentDirectory 属性:

        此属性获取当前进程的当前工作目录。工作目录是程序可以访问和写入文件的目录。

string path = System.Environment.CurrentDirectory;
Console.WriteLine(path);

3. 使用 System.IO.Directory.GetCurrentDirectory() 方法:

        此方法获取当前应用程序的当前工作目录。与 System.Environment.CurrentDirectory 属性类似,但仅适用于 .NET Framework 4.0 及更高版本。

string path = System.IO.Directory.GetCurrentDirectory();
Console.WriteLine(path);

4. 使用 System.AppDomain.CurrentDomain.BaseDirectory 属性:

        此属性获取当前应用程序的基目录。基目录是应用程序的根目录,通常包含程序的执行文件和其他必需的文件。

string path = System.AppDomain.CurrentDomain.BaseDirectory;
Console.WriteLine(path);

5. 使用 System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase 属性:

        此属性获取启动应用程序的可执行文件的路径,不包括可执行文件的名称。

string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
Console.WriteLine(path);

6. 使用 System.Windows.Forms.Application.StartupPath 属性:

        此属性获取启动应用程序的可执行文件的路径,不包括可执行文件的名称。仅适用于 Windows Forms 应用程序。

string path = System.Windows.Forms.Application.StartupPath;
Console.WriteLine(path);

7. 使用 System.Windows.Forms.Application.ExecutablePath 属性:

        此属性获取启动应用程序的可执行文件的路径,包括可执行文件的名称。仅适用于 Windows Forms 应用程序。

string path = System.Windows.Forms.Application.ExecutablePath;
Console.WriteLine(path);

注意:

  • 使用 System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 属性时,请注意,如果程序是从网络下载或临时目录运行的,则返回的路径可能不准确。
  • 使用 System.Environment.CurrentDirectory 属性和 System.IO.Directory.GetCurrentDirectory() 方法时,请注意,工作目录可能会被程序更改。
  • 使用 System.AppDomain.CurrentDomain.BaseDirectory 属性时,请注意,基目录可能包含其他程序的文件。
  • 使用 System.Windows.Forms.Application.StartupPath 属性和 System.Windows.Forms.Application.ExecutablePath 属性时,请注意,这些属性仅适用于 Windows Forms 应用程序。

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

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

相关文章

Spring Boot集成dubbo快速入门Demo

1.什么是dubbo? Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力…

(教程)gpt-4o如何使用,怎么体验?gpt-4o和gpt-4-turbo的区别

今天OpenAI发布了gpt-4o,我体验之后,gpt-4o简直逆天了。中文能力也挺别强。速度比现在的gpt4还要快。 早在 5 月 11 日,Sam 就在推文中表示:OpenAI 并没有推出 GPT-5,或搜索引擎,但团队一直在努力研发一些…

halo博客--解决恶意刷评论的问题

原文网址:halo博客--解决恶意刷评论的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍halo博客如何通过设置评论次数来解决恶意刷评论的问题。 评论功能要设置频率的限制,否则可能被人一直刷评论,然后数据库存的垃圾评论越来越多&#xff0…

51 单片机[2-2]:LED闪烁

摘要: 本文使用STC89C52RC单片机实现单个LED闪烁 新建一个项目,具体步骤见[2-1] 分析: 要使 LED 闪烁(以D1为例),就要先让 P2 0xfe; 再让 P2 0xff; 先在keil5中把程序写成这样: #include &…

答辩PPT框架如何搭建?文心一言AI辅助构建

很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路,一窍不通。但这并不是你们的错,对于平时没接触过相关方面,第一次搞答辩PPT的人来说,这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…

#自学习# 记一次py脚本打开浏览器页面

在项目总结中,遇到系统后台利用浏览器拉起一个已知路径页面的需求,趁着机会整理下。实现起来比较简单,浏览器默认谷歌。 一、技术原理 Selenium:Selenium 是一个用于自动化 Web 浏览器的工具,可模拟用户在浏览器中的各…

pnpm:无法加载文件 C:\Users\PC\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本。

使用pnpm命令启动vue时报了个错: 解决起来也简单,右击开始菜单,用管理员身份打开终端。win11的如下图: win10我记得应该是PowerShell(管理员),这样的。 打开之后执行命令: set-…

cpu缓存一致性问题---cache写策略

为什么会有cpu缓存一致性问题? cpu缓存一致性指的:是缓存中和所其对应在主存中的数据的一致性。 因为cpu运算产生新数据后基于写回策略只更新缓存的值会导致缓存和主存不一致问题 解决cpu缓存一致性问题前,先了解写回策略是什么 了解写回策…

代码随想录——在每个树行中找最大值(Leetcode515)

题目链接 层序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) …

优雅谈论大模型8:神经网络与矩阵

向量与矩阵 上个章节的神经网络是为了解Transformer或者Mamba做好铺垫,在和后辈交流过程中发现有个障碍,那就是向量和矩阵。其实向量和矩阵的表达方式不是所有人都很习惯。在继续下面的章节之前小编认为有必要将向量、矩阵和神经网络做下补充解释。 向…

【并发程序设计】4. exec函数族

4.exec函数族 exec函数族是一组用于在进程中启动另一个程序来替换当前进程的函数。 exec函数族主要用于在当前进程内部执行一个新的程序,而不会创建新的进程。 子进程调用exec函数,族父进程不受影响。进程当前内容被指定的程序替换,但进程…

JAVA实验项目(二): 抽象类、接口的定义与使用

实验项目二 抽象类、接口的定义与使用 Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊&…

Python游戏开发库:开启游戏编程之旅

引言 Python凭借其简洁明了的语法和丰富的库支持,在游戏开发领域占有一席之地。对于希望进入游戏编程世界的开发者来说,Python提供了一个理想的起点。本文将介绍几个关键的Python游戏开发库,帮助您开启游戏编程之旅。 第一部分:P…

Selenium自动操作鼠标的方法及示例(鼠标左右键单击、左键双击、拖动等)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

【线性系统理论】笔记一

一:状态空间表达式 电路系统状态空间描述列写 1:选取状态变量 状态变量定义:线性无关极大组属性。 2:列出电路原始回路方程 ps:状态变量有两个,理论上需要列写2个方程 3:规范形势 4&#xf…

基于Springboot的知名作家信息管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的知名作家信息管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

计算思维的理解

2006年,卡内基梅隆大学周以真教授首次系统性地定义了计算思维。这一年,她在美国计算机权威期刊《Communications of the ACM》上发表了题为《Computational Thinking》的论文,由此开启了计算思维大众化的全新历程。 周以真(Jeanne…

3.3 整型

本节必须掌握的知识点: 整型数据类型的取值范围 示例八 代码分析 汇编解析 获取数据类型的取值范围 3.3.1 整型数据类型取值范围 整型是用来表示限定范围内连续整数的数据类型。表3-1列出了C语言编译器定义的整型数据类型及其大小和取值范围。 类型 存储大小…

三菱FX3U-4AD模拟量电压输入采集实例

硬件:PLC模块 FX3GA-24MT ;A/D模块FX&#xff13…

食品饮料厂做配送小程序的作用是什么

食品饮料厂品牌旗下通常有多个产品类型,多数是以批发为主,也有直营店及线上直播零售等方式,商家如何将品牌宣传和产品销售的更广是需要思考的,其销售模式也多种多样。 私域店铺也是品牌增长的重要方式,在【雨科】平台…