2010-05-12 3 views
1

WCF 설정 프로젝트에서 출력물로 텍스트 파일을 포함 시켰습니다. 텍스트 파일은 프로젝트가 설치된 후 C : \ Program Files \ KLTesting \ KLTestApp와 동일한 폴더에 dll, exe 및 config 파일과 함께 올바르게 위치합니다. 그러나 프로그램이이 파일을 읽으려고 할 때 "C : \ Windows \ system32"아래를보고, &을 읽는 올바른 방법은 무엇입니까?설치된 WCF 서비스의 출력 파일에서 읽기

나는

string a = Directory.GetCurrentDirectory(); 
a += "/R0303.txt"; 
string content = File.ReadAllText(a); 

감사합니다.

답변

1

.exe 파일의 디렉터리를 얻으려면 대신 AppDomain.CurrentDomain.BaseDirectory 또는 AppDomain.CurrentDomain.SetupInformation.ApplicationBase을 사용해야합니다.

+0

큰 일을했는데, 왜 누군가가 이것을 downvote하는지 확신하지 못했습니다. –

0

먼저 Directory.GetCurrentDirectory()를 호출하고 파일 이름을 연결하지 마십시오. 이 서비스는 IIS 또는 일부 다른 유형의 컨테이너와 같은 웹 서버에서 실행되므로 GetCurrentDirectory는 사용자가 발견 한 내용을 사용자에게 알려주지 않습니다. (빠른 탄젠트에서, 앞으로 패스를 결합하기를 원한다면 Path.Combine 메소드를 사용하여 모든 코너 케이스를 처리하고 크로스 플랫폼이되도록해야합니다.)

다음을 수행하십시오 :

전체 파일 이름은 찾고자하는 것이어야합니다. 해당 디렉토리에서 찾고 참조하는 어셈블리에 실제로있는 유형을 사용해야합니다. 그러나이 파일은 프로그램 파일 영역에있는 질문에서 Vista 및 상위 운영 체제의 보안 영역이므로 파일을 읽는 것 외에는 아무 것도 할 수없는 액세스 권한이있을 수 있으므로주의하십시오.

또한 설치 경로의 레지스트리에 응용 프로그램 설치 프로그램의 설치 프로그램을 설치할 수 있습니다. 그런 다음 같은 상자에 있다면이 정보를 가져올 수 있습니다.

또한로드하려는 파일이 문제의 WCF 서비스에 액세스 할 수있는 웹 서버 환경 내에 있는지 확인할 수 있습니다.

+0

Assembly.GetExecutingAssembly()를 사용할 수있는 현재 실행 코드의 어셈블리를 원할 경우 –

+1

그리고 btw, WCF는 asp.net 응용 프로그램 내에서 호스트되는 것으로 제한되지 않습니다. 일반 데스크톱 응용 프로그램 또는 Windows 서비스도 WCF 끝점을 호스팅 할 수 있습니다. –

+0

@BurningIce WCF가 ASP.net 응용 프로그램에서 호스팅되는 것에 국한되지 않음을 알고 있습니다. WCF 서비스가 ASP.net과 호환되지 않아도되므로 웹 서버에서 BTW에 대해서도 말하지 않았습니다. 에 관계없이 그는 GetCurrentDirectory가 System 32를 리턴했다는 것을 의미한다. 이것은 서비스가 자신의 진입 점이고 자신이 원하는 위치에서 DLL을 참조하고 있음을 의미한다. 그가 그 위치를 찾고 싶다면 그는 Reflection을 사용하여 Assembly의 위치를 ​​알아 내야합니다. 이 경우 GetExecutingAssembly와 마찬가지로 AppDomain BaseDirectory를 가져 오는 것이 System 32를 반환 할 가능성이 높습니다. –