我正在使用.Net Framework 4.5.1开发一个C#库,以便在Windows 8.1桌面应用程序中使用它。
在这个库项目中,我有一个JSON
文件,我想加载它。首先,我试图用这个获取当前目录:
string currentDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
但是,我测试了它,Assembly.GetEntryAssembly()
为空。
也许,我可以使用资源文件而不是JSON文件。
这是方法:
private void LoadData()
{
string currentDir =
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
string file =
Path.Combine(currentDir, cardsDir, cardsFile);
string json =
File.ReadAllText(file);
Deck = JsonConvert.DeserializeObject<Card[]>(json);
}
有什么想法吗?有更好的方法吗?我怎样才能获得当前的目录?
答案 0 :(得分:3)
试试这个
Environment.CurrentDirectory
这将返回应用程序的当前工作目录。现在您可以访问与您的应用程序相关的任何文件
string currentDir = Path.GetDirectoryName(Environment.CurrentDirectory);
答案 1 :(得分:1)
请注意Environment.CurrentDirectory
不一定返回包含应用程序文件的目录。这取决于您从哪里开始申请。
例如,如果exe文件位于C:\User\ProgramName\prog.exe
,但您从cmd
启动应用程序,如下所示:
C:\> C:\User\ProgramName\prog.exe
... Environment.CurrentDirectory
的结果将是C:\
,而不是C:\User\ProgramName
。
此外,它也出现在快捷方式中:
请参阅“开始”属性?如果设置了它,它将成为Environment.CurrentDirectory
的结果,因为应用程序将从那里开始。
另一个解决方案是获取运行应用程序的程序集的位置,如下所示:
typeof(Program).Assembly.Location
答案 2 :(得分:0)
是的,您必须考虑@Hagai Shahar的回答,方法是使用 AppDomain.CurrentDomain.BaseDirectory