2014-12-01 3 views
0

Я разрабатываю библиотеку C# с .NET Framework 4.5.1, чтобы использовать ее в настольном приложении 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); 
} 

Любая идея? Есть ли лучший подход? Как получить текущий каталог?

ответ

1

попробовать это

Environment.CurrentDirectory 

это возвращает текущий рабочий каталог приложения. Теперь вы можете получить доступ к любому файлу по отношению к приложению

string currentDir = Path.GetDirectoryName(Environment.CurrentDirectory); 
+0

Я думаю, что даст, что такие же результаты, как и его первой строки в 'струнной currentDir ' – MethodMan

+0

Спасибо,' Environment.CurrentDirectory' возвращает текущий каталог. – VansFannel

+0

Добро пожаловать @VansFannel –

0

Обратите внимание, что «Environment.CurrentDirectory» не обязательно возвращает каталог, содержащие файлы приложение.

все зависит от того, с чего вы начали приложение.

например, если файл exe находится в каталоге C: \ User \ ProgramName \ prog.exe, но вы запускаете приложение из cmd, например: «C:> C: \ User \ ProgramName \ prog.exe».

результат 'Environment.CurrentDirectory' будет 'C: \', а не 'C: \ User \ ProgramName'

, кроме того, это происходит Olso в ярлыках.

посмотреть на: http://oi60.tinypic.com/29eoylf.jpg

вы видите старт в? его будет результатом «Environment.CurrentDirectory», потому что приложение было начато оттуда.

anoter решением является расположение узла, который запускает приложение

что-то вроде этого:

typeof(Program).Assembly.Location

Смежные вопросы