2011-02-28 3 views
0

파일을 읽을 때 상대 경로를 지정할 수있는 .NET 라이브러리에서 메서드를 찾고 있습니다 (정적 메서드라고 생각합니다). . 내 코드입니다 : 내가 상대 경로를 지정하고 싶습니다 그러나.NET에서 상대 경로를 제공하는 파일의 모든 행 읽기 (F #)

let mycontent = Syste..IO.File.ReadAllLines ("C:\...\myfile.txt") 

. 어떻게? 그것은

답변

3

당신이 (다를 수 있습니다 현재 작업 디렉토리, 반대로) 응용 프로그램이 상주, 당신은 다음을 수행 할 수있는 디렉토리에 대한 상대 경로하려면 다음

module Path = 
    let appDir = AppDomain.CurrentDomain.SetupInformation.ApplicationBase 
    let makeAppRelative fileName = System.IO.Path.Combine(appDir, fileName) 

//Usage 
let fullPath = Path.makeAppRelative "myfile.txt" 
3

상대 경로는 다음과 같이 지정 ... MapPath 것 같아요 일종의이다 : 응용 프로그램을 실행하는 작업 디렉토리에 myfile.txt 상대를 검색합니다

System.IO.File.ReadAllLines("myfile.txt"); 

.

System.IO.File.ReadAllLines(@"sub\myfile.txt"); 

당신이 당신의 질문에 언급 된 MapPath 기능은 ASP.NET 응용 프로그램에서 사용하고 당신이 가상 경로의 주어진 파일의 절대 경로를 검색 할 수 있습니다 : 그것은 하위 폴더로도 사용할 수 있습니다. 예를 들면 :

Server.MapPath("~/foo/myfile.txt") 

귀하의 사이트가 c:\wwwroot\mysite에서 호스팅되는 경우는 c:\wwwroot\mysite\foo\myfile.txt를 반환합니다.

+0

일을, 이런 좋은를 게시하다! 감사. –

3

파일 경로를 허용하는 함수에 상대 경로를 전달할 수 있으며 정상적으로 작동합니다.

+1

제 충고는 절대로하지 마십시오. 이것은 현재 작업 디렉토리를 사용하는데, 이것은 프로세스의 다른 모든 코드가 백그라운드 스레드 등에서는 전혀 변경되지 않는 전역 변수입니다. 위험! 나는이 점에 너무 싫증이났다. 실제로 .NET API에 대한 래퍼를 작성했기 때문에 경로가 절대적이지 않은 경우에만이를 주장하고 전역 상태에 의존하지 않는다. – Brian

+1

@Brian : 예; 그것은 대개 나쁜 생각이지만 정확하게 그가하고 싶은 것 같습니다. 아마도 그는이 문제를 알고 있습니다. – SLaks

관련 문제