2009-08-24 12 views
6

Właściwość Environment.CurrentDirectory zawsze zwraca ścieżkę katalogu systemowego zamiast mojego katalogu aplikacji. Na komputerze mojego kolegi zwraca katalog aplikacji.Environment.CurrentDirectory w C# .NET

Na czym polega problem? Jak mogę to rozwiązać?

Poniższy kod działa dla mnie

ePCRSettings = XMLParser.XmlParser.Deserialize<PCRGeneratorSettings>(string.Format("{0}\\ePCRPDFSettings.xml", AppDomain.CurrentDomain.BaseDirectory)); 

AppDomain.CurrentDomain.BaseDirectory - Returns the directory E:\MyApplications\. 

Poniższy kod nie działa dla mnie

ePCRSettings = XMLParser.XmlParser.Deserialize<PCRGeneratorSettings>(string.Format("{0}\\ePCRPDFSettings.xml", Environment.CurrentDirectory)); 

Environment.CurrentDirectory - Returns c:\windows\system32. 

Ten plik .dll mogą być wykorzystywane w VB 6 i aplikacje ASP.NET

+0

Dodaj więcej informacji ... może fragment kodu i wyjaśnienie, co próbujesz zrobić, pomoże Ci uzyskać odpowiedź. – Gishu

+0

Czy jest to aplikacja Windows Forms? – Jehof

+0

To jest biblioteka klas. Ale może być stosowany w aplikacjach VB 6 i ASP.NET – gopal

Odpowiedz

1

Podejrzewam, że może to mieć coś wspólnego z bieżącym identyfikatorem użytkownika, na którym działa aplikacja, na przykład jeśli uruchamiasz aplikację w sesji użytkownika (np. Debugowanie w VS), to może zwrócić twój bieżący katalog, ale jeśli korzystasz z niego w IIS, może to być spowodowane tym, że domyślnie jest to folder systemowy?

3

Nie powinieneś używać wartości Environment.CurrentDirectory jako bazy do przeszukiwania plików, ponieważ może ona ulec zmianie i nie zawsze może być pod Twoją kontrolą. na przykład a Zapisz plik Jako inny folder może zmienić wartość "bieżącego folderu". Jak widać, może przynieść nieprzewidywalne wyniki.

Użyj wartości, którą możesz lepiej kontrolować. na przykład wartość ResourcesFolderPath w pliku konfiguracyjnym (xml?), która jest aktualizowana podczas instalowania aplikacji.

10

ustawić bieżący katalog

Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); //or set executing Assembly location path in param 

Environment.CurrentDirectory //now returns your app path 
5

Zastosowanie

System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetEntryAssembly() Lokalizacja.);