我遇到过很多在 C# 中提取当前目录的方法。
我正在尝试获取我正在编写的 Windows 窗体应用程序的目录。我的应用程序往往被其他进程调用,因此Environment.CurrentDirectory对我不起作用。
经过快速搜索和一些测试后,AppDomain.CurrentDomain.BaseDirectory和Application.StartupPath似乎是最好的方法,并且在我看来工作得很好。
我需要知道哪一种更好用,以及使用其中一种时可能出现的问题。
抛硬币来说,在表现良好的 Winforms 应用程序中它们总是相同的。从技术上讲,它可能会搞砸,.config 文件可以更改.BaseDirectory。StartupPath 不是问题,无论配置如何,它都保证始终返回 EXE 文件的路径,它在幕后使用 winapi 函数。
因此,如果文件位置与 EXE 文件相对,就像通常那样,那么 StartupPath 是“最佳”。请记住,您只能期望能够读取这样的文件。调试时编写工作正常,但部署后就不行了。程序没有对 C:\Program Files 的写访问权限。在这种情况下,使用 AppData 很重要,请使用 Environment.GetFolderPath()。或者,如果数据很宝贵并且需要备份,则可以使用文件共享。