2012-10-16 18 views
7

Próbuję więc utworzyć aplikację, która wymaga odczytu skryptów w podfolderze o nazwie "skrypty". Mój kod mam problemy z:
Directory.GetCurrentDirectory() nie działa w systemie Linux?

string script = Console.ReadLine(); 
string path = Directory.GetCurrentDirectory(); 
string sciptpath = path + "/scripts/" + script; 

to działa prawidłowo w systemie Windows. Ale w Linuksie (działającym przy użyciu Mono Runtime) przechodzi do katalogu osobistego obecnego użytkownika ... a nie do katalogu wykonywalnego. Czy to błąd? A czy ktoś może zaproponować obejście?

+0

Czy można sprawdzić kompatybilność Mono przeciwko http://www.mono-project.com/Compatibility? Możesz także wypróbować narzędzie Mono Migration Analyzer (MoMA), które pomaga zidentyfikować problemy, które możesz mieć podczas przenoszenia aplikacji .Net do Mono (http://www.mono-project.com/MoMA). –

+0

Nie twój problem/pytanie, ale nie łącz ścieżek, użyj Path.Combine zamiast: string scriptpath = Path.Combine (ścieżka, "skrypty", skrypt); - będzie działać poprawnie zarówno w systemie Windows, jak i Linux. –

Odpowiedz

11

Nie chodzi o to, że "naprawia" to, że obecny katalog nie jest taki, jak myślisz. Bieżący katalog jest katalogiem, który "ma fokus" dla ścieżek względnych. Bez względu na to, gdzie znajduje się twój EXE, twój bieżący katalog może znajdować się gdziekolwiek indziej, a nawet może się zmienić podczas wykonywania.

Co chcesz to:

string path = Path.GetDirectoryName(Application.ExecutablePath); 
+0

dzięki temu działało świetnie. Tak naprawdę musiałem tylko wykonać Directory.SetCurrentDirectory (Path.GetDirectoryName (Application.ExecutablePath)); naprawić problem. Dziękuję bardzo! – user1750201

+1

Nie modyfikuj bieżącego katalogu, chyba że masz ku temu dobry powód. –

+0

Jako ogólną zasadę powinieneś traktować bieżący katalog jako zasób kontrolowany przez użytkownika i powinieneś go używać i/lub przetwarzać żądania zainicjowane przez użytkownika (na przykład otwarcie pliku z jakiegoś okna w aplikacji GUI). I należy go modyfikować tylko wtedy, gdy użytkownik tego oczekuje. Po automatycznym załadowaniu dodatkowych plików, które są częścią aplikacji, zwykle jest to niewidoczne dla użytkownika lub przynajmniej użytkownik nie powinien się tym przejmować. Dlatego oblicz ścieżkę na podstawie katalogu instalacyjnego aplikacji i nie używaj bieżącego katalogu. –

Powiązane problemy