3 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
你應(yīng)該不使用Directory.GetCurrentDirectory()
你的情況,當(dāng)前目錄可以從執(zhí)行文件夾不同,尤其是當(dāng)你通過(guò)一個(gè)快捷方式執(zhí)行程序。
最好Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
用于您的目的。這將返回當(dāng)前正在執(zhí)行的程序集所在的路徑名。
雖然我建議的方法允許你區(qū)分正在執(zhí)行的程序集,入口程序集或任何其他已加載的程序集,正如SonerG?nül在他的回答中所說(shuō),
System.IO.Path.GetDirectoryName(Application.ExecutablePath);
也可能就足夠了。這等于
System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
我用以下代碼創(chuàng)建了一個(gè)簡(jiǎn)單的控制臺(tái)應(yīng)用程序:
Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);Console.WriteLine(System.Environment.CurrentDirectory);Console.WriteLine(System.IO.Directory.GetCurrentDirectory());Console.WriteLine(Environment.CurrentDirectory);
我將生成的可執(zhí)行文件復(fù)制到C:\temp2
。然后我在該可執(zhí)行文件中放置了一個(gè)快捷方式C:\temp3
,并運(yùn)行它(一次來(lái)自exe本身,一次來(lái)自快捷方式)。它兩次都給出了以下輸出:
C:\temp2 C:\temp2\ C:\temp2 C:\temp2 C:\temp2
雖然我肯定必須有一些蠢貨理由來(lái)解釋為什么有五種不同的方法幾乎完全相同的東西,我當(dāng)然不知道它是什么。然而,在大多數(shù)情況下,您可以自由選擇您喜歡的任何一種情況。
更新: 我修改了快捷方式屬性,將“開(kāi)始于:”字段更改為C:\temp3
。這導(dǎo)致以下輸出:
C:\temp2 C:\temp2\ C:\temp3 C:\temp3 C:\temp3
......至少展示了不同方法之間的一些區(qū)別。
- 3 回答
- 0 關(guān)注
- 546 瀏覽
添加回答
舉報(bào)