【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 應用程序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12590.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12590.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12590.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于區塊鏈的Web 3.0關鍵技術研討會順利召開

基于區塊鏈的Web3.0關鍵技術研討會 2024年4月23日,由國家區塊鏈技術創新中心主辦的“基于區塊鏈的web3.0關鍵技術研討會”召開。Web3.0被用來描述一個運行在“區塊鏈”技術之上的“去中心化”的互聯網,該網絡上的主體掌握自己數據所有權和使用權&#xf…

【回眸】git VS repo 區別

git VS repo 區別 1. git:Git是一個開源的分布式版本控制系統,用以有效、高速的處理從很小到非常大的項目版本管理。 2. Repo: Repo是谷歌用Python腳本寫的調用git的一個腳本,Repo實現管理多個git庫。 Git 常用命令 1. git init:在當前目…

【原創】java+springboot+mysql企業郵件管理系統設計與實現

個人主頁:程序猿小小楊 個人簡介:從事開發多年,Java、Php、Python、前端開發均有涉獵 博客內容:Java項目實戰、項目演示、技術分享 文末有作者名片,希望和大家一起共同進步,你只管努力,剩下的交…

Vue的學習 —— <vue組件>

目錄 前言 正文 一、選項式API與組合式API 二、生命周期函數 1、onBeforeMount() 2、onMounted() 3、onBeforeUpdate() 4、onUpdated() 5、onBeforeUnmount() 6、onUnmounted() 三、組件之間的樣式沖突 四、父組件向子組件傳遞數據 1、定義props 2、靜態綁定props…

C++青少年簡明教程:賦值語句

C青少年簡明教程:賦值語句 賦值語句是編程中最基本也是最常用的概念之一,它用于將一個值分配給一個變量。 使用等號( 稱為賦值運算符)來給變量賦值,賦值語句的左邊是要賦值的變量,右邊是要賦給變量的值。C…

Docker 使用 CentOS 鏡像

使用 docker run 直接運行 CentOS 7 鏡像,并登錄 bash。 C:\Users\yhu>docker run -it centos:centos7 bash Unable to find image centos:centos7 locally centos7: Pulling from library/centos 2d473b07cdd5: Pull complete Digest: sha256:be65f488b7764ad36…

GPT-4o:全面深入了解 OpenAI 的 GPT-4o

GPT-4o:全面深入了解 OpenAI 的 GPT-4o 關于 GPT-4o 的所有信息ChatGPT 增強的用戶體驗改進的多語言和音頻功能GPT-4o 優于 Whisper-v3M3Exam 基準測試中的表現 GPT-4o 的起源追蹤語言模型的演變GPT 譜系:人工智能語言的開拓者多模式飛躍:超越…

連接虛擬機的 redis

用Windows 的 Redis Insight 連接虛擬機的 安裝redis發現連不上 我的redis是新安裝,沒有用戶名密碼,發現是ip問題 127 開頭的被我注釋了,換成了ifconfig查到的ip

vim命令大全(基礎版)

創建一個py文件 vim cs.py一、命令模式 按Esc后,按shift:進入命令模式 :wq # 保存并退出 :q # 退出 :q! # 強制退出 :%d # 刪除全部內容按兩下d,刪除光標所在行 按兩下y,復制光標所在行 按一下p,粘貼復制內容到下…

Android性能:SurfaceFlinger與BufferQueue(3)

Android性能:SurfaceFlinger與BufferQueue(3) Android顯示系統的組成可以概括為兩大部分:繪制(DrawFrame)合成(SurfaceFlinger HWC) 繪制:Surface中空的 GraphicBuffer->CPU或者GPU通過Canv…

Python GUI開發- Qt Designer環境搭建

前言 Qt Designer是PyQt5 程序UI界面的實現工具,使用 Qt Designer 可以拖拽、點擊完成GUI界面設計,并且設計完成的 .ui 程序可以轉換成 .py 文件供 python 程序調用 環境準備 使用pip安裝 pip install pyqt5-toolsQt Designer 環境搭建 在pip安裝包…

Vue 常見通信

Vue 常見通信 1、父子通信 父傳子 props,子傳父 events($emit); 通過父鏈 / 子鏈 通信$parent / $children; $refs獲取ref 可以訪問組件實例方法,; 提供與注射provide / inject a t t r s …

使用Processing和PixelFlow庫創建交互式流體太極動畫

使用Processing和PixelFlow庫創建交互式流體太極動畫 引言準備工作效果展示代碼結構代碼解析第一部分:導入庫和設置基本參數第二部分:流體類定義MyFluidDataConfig 類詳解MyFluidData 類詳解my_update 方法詳解流體類定義完整代碼 第三部分:太…

找數字-算法

解法一、數位模擬 比n大的最小數就是n1,當n1時,以下幾種情況會導致n中1的個數發生變化(或者不變) 1.n的低位連續1的個數count>1,如1011,10111,1111等,加1后使得n中1的個數減少count-1個 解…

基于SVPWM的飛輪控制系統的simulink建模與仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序與模型 4.系統原理簡介 5.完整工程文件 1.課題概述 基于SVPWM的飛輪控制系統的simulink建模與仿真。SVPWM的核心思想是將逆變器輸出的三相電壓矢量在兩相靜止坐標系(αβ坐標系)中表示,通過控…

Python3 數據類型詳解:掌握數據基石,編寫高效程序

Python3 中的基本數據類型包括整數(int)、浮點數(float)、布爾值(bool)、字符串(str)、列表(list)、元組(tuple)、集合(se…

JAVA static注入 Util使用之Service注入

一般在Util等靜態方法中調用Service或mapper,初始化后會出現空指針異常:java.lang.NullPointerException。 代碼執行優先級的問題,在一個Java類中,存在著靜態代碼塊,靜態方法,構造函數,成員方法等等。不同…

golang中的類和接口

類 在 Go 語言中并沒有類的概念,而是使用結構體來實現面向對象的特性。通過 type 關鍵字可以定義自定義類型,包括結構體類型。下面是一個簡單的示例: package mainimport "fmt"// 定義一個結構體類型 type Person struct {Name s…

只對外公開必要的信息和步驟

隱藏內部結構 使對象的內部結構對外部不可見的內容的處理被稱為封裝化。只公開方法等使用者所需要的最低限度的接口,使用者只能通過外部接口進行訪問。如此一來,使用該類的程序就無須知道其內部的具體實現。 通過封裝化,不僅可以防止調用者…

Node.js安裝及環境配置(超詳細!保姆級!!)

目錄 一、進入官網地址下載安裝包 二、安裝程序 三、環境配置 四、測試 五、安裝淘寶鏡像 一、進入官網地址下載安裝包 Node.js — Download Node.js (nodejs.org) 選擇對應你系統的 node.js 版本,我選擇的是Windows系統,64位 點擊圖中選項&#…