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);