一、前言:
????????在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 應用程序。