2011-08-03 2 views
12

I 다음 명령이 : 그러나 왜이 길을 가지지 않을 겁니다. 콤비네이션은 작동합니까?

reportedContentFolderPath = "\\ReportedContent\\" 

가 왜 Path.Combine는 E를 자르고있다

contentFolder.FullName = "E:\\" 

: 나는 디버거에서 볼 때

string reportedContentFolderPath = 
Path.Combine(contentFolder.FullName.ToString(), @"\ReportedContent\"); 

내가 다음을 참조 할 수 있습니다 : \?

+2

'reportedContentFolderPath'에 슬래시를 사용하지 마십시오. – Mrchief

+1

이 이전 답변을 수정하십시오. http://stackoverflow.com/questions/53102/why-does-path-combine-not-properly-concatenate-filenames-that-start- 와 함께 - 경로 - dir –

답변

27

@"\ReportedContent\"에는 앞에 슬래시가 있습니다. 당신은 원하지 않는다 (또는 후행 하나, 나는 의심) - 단지 시도 :

string reportedContentFolderPath = 
    Path.Combine(contentFolder.FullName.ToString(), "ReportedContent"); 

the documentation에서 : 루트를 포함하지 않는

path2 경우 (예를 들어, path2하지 않는 경우 분리. 자 또는 드라이브 스펙으로 시작), 결과는 중간. 자 분리.자가있는 두 경로의 연결입니다. path2에 루트가 포함되어 있으면 path2이 반환됩니다. 귀하의 경우에는

, path2 루트를 포함했다, 그래서는 path1 보지 않고 돌려 보내졌다.

6

Path.Combine은 분리 문자 (\)로 시작하는 경우 두 번째 인수를 반환합니다.

3

두 번째 문자열의 접두사로 슬래시를 지정하면 Combine 메서드가 현재 드라이브를 사용한다고 가정합니다. 슬래시를 제거하십시오.

7

그것이 방법 문서에 설명되어있다 : 경로 2가 (경로 2는 구분 문자 또는 드라이브 사양을 시작하지 않는 경우), 결과를 연결하는 루트를 포함하지 않는 경우

중간에 분리 문자가있는 두 경로. path2가 루트를 포함하면 path2가 리턴됩니다.

난 당신이 모든 가능한 조합이 해결 방법을 이해하는 것이 모두를 읽을 권장합니다 : 그것은 Path.Combine처럼 보이는 Path.Combine Method

1

E:\\ UNC 경로를 참조하는 두 개의 슬래시를 생각하고, UNC 경로는 안 접두사가있는 드라이브 문자. contentFolder를 E:\으로 변경하면 제대로 작동합니다.

1

MSDN (강조 내)에서 :

public static string Combine(string path1, string path2) 

[...]

반환 값

유형 : 합한 경로 선택 System.String. 지정된 패스의 1 개가 길이가 0의 캐릭터 라인 인 경우,이 메소드는 다른 패스를 돌려줍니다.path2에 절대 경로가 포함되어있는 경우이 메서드는 path2을 반환합니다.

@"\ReportedContent\"은 백 슬래시로 시작하므로 절대 경로입니다.

관련 문제