2012-10-16 2 views
7

그래서 "scripts"라는 하위 폴더에서 스크립트를 읽어야하는 응용 프로그램을 만들려고합니다.
Directory.GetCurrentDirectory()가 Linux에서 작동하지 않습니까?

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

이 Windows에서 잘 작동 : 내 코드는 내가 문제가 있습니다. 그러나 Linux (Mono Runtime을 사용하여 실행)에서는 실행 파일의 디렉토리가 아니라 현재 사용자 홈 디렉토리로 이동합니다. 이거 버그 야? 누군가가 대안을 제안 할 수 있습니까?

+0

는 http://www.mono-project.com/Compatibility에 대한 모노 호환성을 확인 했습니까? .Net 응용 프로그램을 Mono (http://www.mono-project.com/MoMA)로 이식 할 때 발생할 수있는 문제점을 식별하는 데 도움이되는 Mono Migration Analyzer (MoMA) 도구를 사용해 볼 수도 있습니다. –

+0

문제/질문은 아니지만 경로를 연결하지 말고 대신 Path.Combine을 사용하십시오. string scriptpath = Path.Combine (path, "scripts", script); - 그것은 윈도우와 리눅스 모두에서 올바르게 작동 할 것입니다. –

답변

11

"수정"이 필요하지 않은 것은 현재 디렉토리가 사용자가 생각하는 것과 다르다는 것입니다. 현재 디렉토리는 상대 경로에 "포커스가있는"디렉토리입니다. EXE가 어디에 있든 관계없이 현재 디렉토리는 다른 위치에 있거나 실행 중 변경 될 수 있습니다.

당신이 원하는입니다 :

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

감사합니다. 사실 Directory.SetCurrentDirectory (Path.GetDirectoryName (Application.ExecutablePath)); 문제를 해결할 수 있습니다. 정말 고맙습니다! – user1750201

+1

정당한 이유가없는 한 현재 디렉토리를 수정하지 마십시오. –

+0

일반적으로 현재 디렉토리는 사용자가 제어하는 ​​자원으로 취급해야하며 사용자가 시작한 요청을 처리 할 때 (예 : GUI 응용 프로그램의 일부 대화 상자에서 파일 열기) 사용해야합니다.). 사용자가이를 예상 할 때만 수정해야합니다. 응용 프로그램의 일부인 추가 파일을 자동으로로드하면 대개 사용자에게 보이지 않거나 적어도 사용자는 방해받지 않아야합니다. 따라서 응용 프로그램의 설치 디렉토리를 기반으로 경로를 계산하고 현재 디렉토리를 사용하지 마십시오. –

관련 문제