在类库中获取当前目录

时间:2014-12-01 17:29:09

标签: c# json wpf windows-8 windows-8.1

我正在使用.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);
}

有什么想法吗?有更好的方法吗?我怎样才能获得当前的目录?

3 个答案:

答案 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

此外,它也出现在快捷方式中:

Application properties screen shot

请参阅“开始”属性?如果设置了它,它将成为Environment.CurrentDirectory的结果,因为应用程序将从那里开始。

另一个解决方案是获取运行应用程序的程序集的位置,如下所示:

typeof(Program).Assembly.Location

答案 2 :(得分:0)

是的,您必须考虑@Hagai Shahar的回答,方法是使用 AppDomain.CurrentDomain.BaseDirectory