2009-08-05 5 views
1

내 파일은 다음과 같이 참조됩니다 (모두 상대적입니다).system.io.directorynotfound ->하지만 콘솔에서 작동합니다!

// WHERE YOU KEEP THE PAGE TITLE XML 
    public static string  myPageTitleXML = "xml/pagetitles.xml"; 

 using (StreamReader r = new StreamReader(myPageTitleXML)) 
    { //etc.. . .etc....etc.. 
    } 

system.io.directorynotfound를 얻었고 "double"을 두 번 사용하면 "이 문제를 해결해야합니다" 실행 파일을 클릭하십시오. 하지만 콘솔에서 실행하면 매력처럼 작동합니다. 여기 뭐가 잘못 됐니?

Environment.CurrentDirectory를 설정하려고 시도했으나 아무 것도 할 수 없었습니다. 어쨌든 왜해야합니까? 그것은 상대적 경로의 목적을 무효로하지 않습니까?

응답 ..

"응용 프로그램"현재의 컨텍스트에 존재하지 않습니다, 나는 사람들이 언급 한 노력하고있어, 이건 windows.form

테스트

Path.GetDirectoryName (Reflection. Assembly.GetExecutingAssembly(). GetName(). CodeBase), myPageTitleXML); 오류를 제공합니다 Path.GetFullPath()처럼 URI 형식이 지원되지 않습니다. Server.MapPath 결과도 오류가 발생합니다. 현재 오프라인 상태입니다.

답변

0

음이 디렉토리를 가정하는 코드가 실행되는 디렉토리 아래 어딘가에 현재 오프라인 상태입니다

Application.ExecutablePath() 

또는

Application.StartUpPath() 

은 .. 그것의 'pagetitles.xml'파일과 'XML'디렉토리 검색에 갈 때 응용 프로그램이 보는 것과 같은 아이디어를 얻을 수 있습니다.

이러한 방법 중 하나에 의해 반환 된 디렉토리가 생각했던 위치를 가리 키지 않으면 응용 프로그램과 동일한 디렉토리 내에 있도록 응용 프로그램의 위치 또는이 폴더의 위치를 ​​이동해야합니다 .

희망이 있으면 올바른 길로 인도합니다.

0

실행 파일을 두 번 클릭하여 실행할 때 xml이라는 폴더에 pagetitles.xml이라는 파일이 있습니까? 여기서 xml은 실행 파일과 같은 위치에있는 폴더입니까?

확실히 이와 같은 상대 경로를 사용할 수는 있지만 실제로 권장하지는 않습니다. 대신 다음과 같이 사용하십시오.

string fileToOpen = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), myPageTitleXML); 
using (StreamReader r = new StreamReader(fileToOpen)) 
{ 
    //etc.. . .etc....etc.. 
} 
0

이 ASP.NET 코드입니까? 그렇다면 아마도 MapPath ("xml/pagetitles.xml")를 사용해야 할 것입니다.