콘텐츠로 건너뛰기
» Posts » [C#] Path.Combine이 제대로 동작하지 않고 이상할때

[C#] Path.Combine이 제대로 동작하지 않고 이상할때

 

Path.Combine이 제대로 동작하지 않고 이상했다.

공식문서를 보기로 했다.

Path.Combine Method (System.IO) | Microsoft Learn

Path 2에 루트가 있으면 Path2를 리턴한다고 적혀있다…ㅠ

즉, 아래와 같은 상황인 것이다.

string path1 = "C:\\Temp";

string path2 = "\\Test.txt";

string combinedPath = Path.Combine(path1, path2);

위와같은 코드를 실행 시키면 

combinedPath에는 “C:\\Temp\\Test.txt” 가 붙어야 할 것 같지만

사실은 “\\Test.txt”만 들어있다.

 

이유는, Path.Combine은 내부적으로 아래와 같은 로직으로 돌아간다.

private static string CombineInternal(string first, string second)
       {
           if (string.IsNullOrEmpty(first))
               return second;

           if (string.IsNullOrEmpty(second))
               return first;

           if (IsPathRooted(second.AsSpan()))  ////// <- 루트인지 검사하는 부분 
               return second;

           return JoinInternal(first.AsSpan(), second.AsSpan());
       }

if (IsPathRooted(second.AsSpan())) 구문을 보면,

두번째 Path가 루트로 시작하면 return second; 라고 되어있다.

즉, 두번째 Path에는 “\\”로 시작하면 기대한 동작이 나오지 않는것.

 

두번째 Path에 꼭 루트(\\)가 들어가야 한다면 Path.Join을 사용하면 된다.

(단, .NET CORE부터 지원)

아래와 같이 바꾸면 되겠다~

string path1 = "C:\\Temp"; 
string path2 = "\\Test.txt"; 
string combinedPath = Path.Join(path1, path2);

 

 

태그: