Path.Join 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
오버로드
Join(String, String, String, String) |
네 경로를 단일 경로에 연결합니다. |
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) |
네 경로 구성 요소를 단일 경로로 연결합니다. |
Join(String, String, String) |
세 개의 경로를 단일 경로에 연결합니다. |
Join(String[]) |
경로 배열을 단일 경로로 연결합니다. |
Join(String, String) |
두 경로를 단일 경로에 연결합니다. |
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>) |
두 경로 구성 요소를 단일 경로로 연결합니다. |
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) |
세 개의 경로 구성 요소를 단일 경로로 연결합니다. |
Join(String, String, String, String)
- Source:
- Path.cs
- Source:
- Path.cs
- Source:
- Path.cs
네 경로를 단일 경로에 연결합니다.
public:
static System::String ^ Join(System::String ^ path1, System::String ^ path2, System::String ^ path3, System::String ^ path4);
public static string Join (string? path1, string? path2, string? path3, string? path4);
static member Join : string * string * string * string -> string
Public Shared Function Join (path1 As String, path2 As String, path3 As String, path4 As String) As String
매개 변수
- path1
- String
조인할 첫 번째 경로입니다.
- path2
- String
조인할 두 번째 경로입니다.
- path3
- String
조인할 세 번째 경로입니다.
- path4
- String
조인할 네 번째 경로입니다.
반환
연결된 경로입니다.
설명
이 메서드는 단순히 , path2
path3
및 를 연결path
하고path4
, 경로 구성 요소가 아직 없는 경우 경로 구성 요소 사이에 디렉터리 구분 기호 문자를 추가합니다. , path2
path3
또는 path4
인수의 path1
길이가 0이면 메서드는 나머지 인수를 연결합니다. 연결된 문자열의 길이가 0이면 메서드는 를 반환합니다 String.Empty.
또는 가 path2
path3
대상 플랫폼 Join
에 적합하지 않은 경로 구분 기호 문자로 끝나는 경우 path1
메서드는 원래 경로 구분 기호 문자를 유지하고 지원되는 문자를 추가합니다. 이 문제는 Unix 기반 시스템에서 경로 구분 기호로 인식되지 않는 Windows 백슬래시("\") 문자를 사용하는 하드 코딩된 경로에서 발생합니다. 이 문제를 해결하려면 다음을 수행할 수 있습니다.
디렉터리 구분 기호 문자를 하드 코딩하는 대신 속성 값을 Path.DirectorySeparatorChar 검색합니다.
슬래시("/")를 디렉터리 구분 기호 문자로 사용합니다. 이 문자는 Unix 기반 시스템의 속성과 Windows 시스템의 속성에 의해 Path.AltDirectorySeparatorChar 반환 Path.DirectorySeparatorChar 됩니다.
메서드와 Combine 달리 메서드는 Join 반환된 경로를 루트하려고 시도하지 않습니다. 즉, 또는 가 path4
path3
절대 경로인 경우 path2
메서드는 Join
메서드처럼 Combine 이전 경로를 삭제하지 않습니다.
이러한 문자를 검색 와일드카드 문자에 사용할 수 있으므로 디렉터리 및 파일 이름에 대한 모든 잘못된 문자가 메서드에서 Join
허용되지 않는 것으로 해석되는 것은 아닙니다. 예를 들어 파일을 Path.Join("c:\\", "temp", "*.txt")
만들 때 유효하지 않을 수 있지만 검색 문자열로 유효합니다. 따라서 메서드는 Join
성공적으로 해석합니다.
적용 대상
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>)
- Source:
- Path.cs
- Source:
- Path.cs
- Source:
- Path.cs
네 경로 구성 요소를 단일 경로로 연결합니다.
public:
static System::String ^ Join(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, ReadOnlySpan<char> path3, ReadOnlySpan<char> path4);
public static string Join (ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, ReadOnlySpan<char> path3, ReadOnlySpan<char> path4);
static member Join : ReadOnlySpan<char> * ReadOnlySpan<char> * ReadOnlySpan<char> * ReadOnlySpan<char> -> string
Public Shared Function Join (path1 As ReadOnlySpan(Of Char), path2 As ReadOnlySpan(Of Char), path3 As ReadOnlySpan(Of Char), path4 As ReadOnlySpan(Of Char)) As String
매개 변수
- path1
- ReadOnlySpan<Char>
조인할 첫 번째 경로를 포함하는 문자 범위입니다.
- path2
- ReadOnlySpan<Char>
조인할 두 번째 경로를 포함하는 문자 범위입니다.
- path3
- ReadOnlySpan<Char>
조인할 세 번째 경로를 포함하는 문자 범위입니다.
- path4
- ReadOnlySpan<Char>
조인할 네 번째 경로를 포함하는 문자 범위입니다.
반환
연결된 경로입니다.
설명
이 메서드는 단순히 , path2
path3
및 를 연결path
하고path4
, 경로 구성 요소가 아직 없는 경우 경로 구성 요소 사이에 디렉터리 구분 기호 문자를 추가합니다. Length, path2
path3
또는 path4
인수의 path1
가 0이면 메서드는 나머지 인수를 연결합니다. 모든 구성 요소의 가 ReadOnlySpan<T>.Length 0이면 메서드는 를 반환합니다 String.Empty.
또는 가 path2
path3
대상 플랫폼 Join
에 적합하지 않은 경로 구분 기호 문자로 끝나는 경우 path1
메서드는 원래 경로 구분 기호 문자를 유지하고 지원되는 문자를 추가합니다. 이 문제는 Unix 기반 시스템에서 경로 구분 기호로 인식되지 않는 Windows 백슬래시("\") 문자를 사용하는 하드 코딩된 경로에서 발생합니다. 이 문제를 해결하려면 다음을 수행할 수 있습니다.
디렉터리 구분 기호 문자를 하드 코딩하는 대신 속성 값을 Path.DirectorySeparatorChar 검색합니다.
슬래시("/")를 디렉터리 구분 기호 문자로 사용합니다. 이 문자는 Unix 기반 시스템의 속성과 Windows 시스템의 속성에 의해 Path.AltDirectorySeparatorChar 반환 Path.DirectorySeparatorChar 됩니다.
메서드와 Combine 달리 메서드는 Join 반환된 경로를 루트하려고 시도하지 않습니다. 즉, 또는 가 path4
path3
절대 경로인 경우 path2
메서드는 Join
메서드처럼 Combine 이전 경로를 삭제하지 않습니다.
이러한 문자를 검색 와일드카드 문자에 사용할 수 있으므로 디렉터리 및 파일 이름에 대한 모든 잘못된 문자가 메서드에서 Join
허용되지 않는 것으로 해석되는 것은 아닙니다. 예를 들어 파일을 Path.Join("c:\\", "temp", "*.txt")
만들 때 유효하지 않을 수 있지만 검색 문자열로 유효합니다. 따라서 메서드는 Join
성공적으로 해석합니다.
적용 대상
Join(String, String, String)
- Source:
- Path.cs
- Source:
- Path.cs
- Source:
- Path.cs
세 개의 경로를 단일 경로에 연결합니다.
public:
static System::String ^ Join(System::String ^ path1, System::String ^ path2, System::String ^ path3);
public static string Join (string? path1, string? path2, string? path3);
static member Join : string * string * string -> string
Public Shared Function Join (path1 As String, path2 As String, path3 As String) As String
매개 변수
- path1
- String
조인할 첫 번째 경로입니다.
- path2
- String
조인할 두 번째 경로입니다.
- path3
- String
조인할 세 번째 경로입니다.
반환
연결된 경로입니다.
설명
이 메서드는 단순히 , path2
및 를 연결path
하고path3
, 경로 구성 요소가 아직 없는 경우 경로 구성 요소 사이에 디렉터리 구분 기호 문자를 추가합니다. 또는 path2
path3
인수의 path1
길이가 0이면 메서드는 나머지 인수를 연결합니다. 연결된 문자열의 길이가 0이면 메서드는 를 반환합니다 String.Empty.
또는 path2
가 대상 플랫폼 Join
에 적합하지 않은 경로 구분 기호 문자로 끝나는 경우 path1
메서드는 원래 경로 구분 기호 문자를 유지하고 지원되는 문자를 추가합니다. 이 문제는 Unix 기반 시스템에서 경로 구분 기호로 인식되지 않는 Windows 백슬래시("\") 문자를 사용하는 하드 코딩된 경로에서 발생합니다. 이 문제를 해결하려면 다음을 수행할 수 있습니다.
디렉터리 구분 기호 문자를 하드 코딩하는 대신 속성 값을 Path.DirectorySeparatorChar 검색합니다.
슬래시("/")를 디렉터리 구분 기호 문자로 사용합니다. 이 문자는 Unix 기반 시스템의 속성과 Windows 시스템의 속성에 의해 Path.AltDirectorySeparatorChar 반환 Path.DirectorySeparatorChar 됩니다.
메서드와 Combine 달리 메서드는 Join 반환된 경로를 루트하려고 시도하지 않습니다. 즉, 또는 path3
가 절대 경로인 경우 path2
메서드는 Join
메서드처럼 Combine 이전 경로를 삭제하지 않습니다.
이러한 문자를 검색 와일드카드 문자에 사용할 수 있으므로 디렉터리 및 파일 이름에 대한 모든 잘못된 문자가 메서드에서 Join
허용되지 않는 것으로 해석되는 것은 아닙니다. 예를 들어 파일을 Path.Join("c:\\", "temp", "*.txt")
만들 때 유효하지 않을 수 있지만 검색 문자열로 유효합니다. 따라서 메서드는 Join
성공적으로 해석합니다.
적용 대상
Join(String[])
- Source:
- Path.cs
- Source:
- Path.cs
- Source:
- Path.cs
경로 배열을 단일 경로로 연결합니다.
public:
static System::String ^ Join(... cli::array <System::String ^> ^ paths);
public static string Join (params string?[] paths);
static member Join : string[] -> string
Public Shared Function Join (ParamArray paths As String()) As String
매개 변수
- paths
- String[]
경로 배열입니다.
반환
연결된 경로입니다.
설명
이 메서드는 단순히 의 모든 문자열을 paths
연결하고 경로 구성 요소가 아직 없는 경우 경로 구성 요소 사이에 디렉터리 구분 기호 문자를 추가합니다. Length 의 경로 paths
중 의 가 0이면 메서드는 나머지 인수를 연결합니다. 결과 연결 문자열의 길이가 0이면 메서드는 를 반환합니다 String.Empty.
마지막 경로를 제외한 의 paths
경로가 대상 플랫폼 Join
에 적합하지 않은 경로 구분 기호 문자로 끝나는 경우 메서드는 원래 경로 구분 기호 문자를 유지하고 지원되는 문자를 추가합니다. 이 문제는 Unix 기반 시스템에서 경로 구분 기호로 인식되지 않는 Windows 백슬래시("\") 문자를 사용하는 하드 코딩된 경로에서 발생합니다. 이 문제를 해결하려면 다음을 수행할 수 있습니다.
디렉터리 구분 기호 문자를 하드 코딩하는 대신 속성 값을 Path.DirectorySeparatorChar 검색합니다.
슬래시("/")를 디렉터리 구분 기호 문자로 사용합니다. 이 문자는 Unix 기반 시스템의 속성과 Windows 시스템의 속성에 의해 Path.AltDirectorySeparatorChar 반환 Path.DirectorySeparatorChar 됩니다.
메서드와 Combine 달리 메서드는 Join 반환된 경로를 루트하려고 시도하지 않습니다. 즉, 첫 번째 경로를 제외하고 의 paths
경로 중 하나가 절대 경로 Join
인 경우 메서드는 메서드처럼 Combine 이전 경로를 삭제하지 않습니다.
이러한 문자를 검색 와일드카드 문자에 사용할 수 있으므로 디렉터리 및 파일 이름에 대한 모든 잘못된 문자가 메서드에서 Join
허용되지 않는 것으로 해석되는 것은 아닙니다. 예를 들어 파일을 Path.Join("c:\\", "temp", "*.txt")
만들 때 유효하지 않을 수 있지만 검색 문자열로 유효합니다. 따라서 메서드는 Join
성공적으로 해석합니다.
적용 대상
Join(String, String)
- Source:
- Path.cs
- Source:
- Path.cs
- Source:
- Path.cs
두 경로를 단일 경로에 연결합니다.
public:
static System::String ^ Join(System::String ^ path1, System::String ^ path2);
public static string Join (string? path1, string? path2);
static member Join : string * string -> string
Public Shared Function Join (path1 As String, path2 As String) As String
매개 변수
- path1
- String
조인할 첫 번째 경로입니다.
- path2
- String
조인할 두 번째 경로입니다.
반환
연결된 경로입니다.
설명
이 메서드는 경로 path
구성 요소 간에 디렉터리 구분 기호 문자를 연결하고 path2
추가합니다(아직 없는 경우). 또는 path2
의 path1
길이가 0이면 메서드는 나머지 인수를 연결합니다. 연결된 문자열의 길이가 0이면 메서드는 를 반환합니다 String.Empty.
대상 플랫폼 Join
에 적합하지 않은 경로 구분 기호 문자로 끝나는 경우 path1
메서드는 원래 경로 구분 기호 문자를 유지하고 지원되는 문자를 추가합니다. 이 문제는 Unix 기반 시스템에서 경로 구분 기호로 인식되지 않는 Windows 백슬래시("\") 문자를 사용하는 하드 코딩된 경로에서 발생합니다. 이 문제를 해결하려면 다음을 수행할 수 있습니다.
디렉터리 구분 기호 문자를 하드 코딩하는 대신 속성 값을 Path.DirectorySeparatorChar 검색합니다.
슬래시("/")를 디렉터리 구분 기호 문자로 사용합니다. 이 문자는 Unix 기반 시스템의 속성과 Windows 시스템의 속성에 의해 Path.AltDirectorySeparatorChar 반환 Path.DirectorySeparatorChar 됩니다.
메서드와 Combine 달리 메서드는 Join 반환된 경로를 루트하려고 시도하지 않습니다. 즉, 가 절대 경로인 경우 path2
메서드는 Join
메서드처럼 Combine 이전 경로를 삭제하지 않습니다.
이러한 문자를 검색 와일드카드 문자에 사용할 수 있으므로 디렉터리 및 파일 이름에 대한 모든 잘못된 문자가 메서드에서 Join
허용되지 않는 것으로 해석되는 것은 아닙니다. 예를 들어 파일을 Path.Join("c:\\", "temp", "*.txt")
만들 때 유효하지 않을 수 있지만 검색 문자열로 유효합니다. 따라서 메서드가 Join
성공적으로 해석됩니다.
적용 대상
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>)
- Source:
- Path.cs
- Source:
- Path.cs
- Source:
- Path.cs
두 경로 구성 요소를 단일 경로로 연결합니다.
public:
static System::String ^ Join(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2);
public static string Join (ReadOnlySpan<char> path1, ReadOnlySpan<char> path2);
static member Join : ReadOnlySpan<char> * ReadOnlySpan<char> -> string
Public Shared Function Join (path1 As ReadOnlySpan(Of Char), path2 As ReadOnlySpan(Of Char)) As String
매개 변수
- path1
- ReadOnlySpan<Char>
조인할 첫 번째 경로를 포함하는 문자 범위입니다.
- path2
- ReadOnlySpan<Char>
조인할 두 번째 경로를 포함하는 문자 범위입니다.
반환
결합된 경로입니다.
예제
다음 예제에서는 및 Path.Combine(String, String) 메서드에서 반환 Path.Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>) 된 경로의 차이를 보여 줍니다. 첫 번째 문자열이 드라이브 및 루트 디렉터리를 포함하는 정규화된 경로이고 두 번째 문자열이 첫 번째 경로의 상대 경로인 경우 두 메서드는 동일한 결과를 생성합니다. 메서드에 대한 ShowPathInformation
두 번째 및 세 번째 호출에서는 두 메서드가 반환한 문자열이 서로 다릅니다. 두 번째 메서드 호출에서 첫 번째 문자열 인수는 드라이브이고 두 번째 문자열 인수는 루팅된 디렉터리입니다. 메서드는 Join
두 문자열을 연결하고 중복 경로 구분 기호를 유지합니다. 메서드는 Combine
드라이브를 포기하고 현재 드라이브에 루팅된 디렉터리를 반환합니다. 애플리케이션의 현재 드라이브가 C:\이고 문자열이 디렉터리의 파일 또는 파일에 액세스하는 데 사용되는 경우 D:가 아닌 C: 에 액세스합니다. 마지막으로, 에 대한 세 번째 호출 ShowPathInformation
의 두 인수가 모두 루팅 Join
되므로 메서드는 단순히 추가하여 무의미한 파일 경로를 만드는 반면 메서드는 Combine
첫 번째 문자열을 삭제하고 두 번째 문자열을 반환합니다. 파일 액세스에 이 문자열을 사용하면 애플리케이션에서 중요한 파일에 의도하지 않은 액세스 권한을 부여할 수 있습니다.
using System;
using System.IO;
class Program2
{
static void Main()
{
var path1 = "C:/Program Files/";
var path2 = "Utilities/SystemUtilities";
ShowPathInformation(path1, path2);
path1 = "C:/";
path2 = "/Program Files";
ShowPathInformation(path1, path2);
path1 = "C:/Users/Public/Documents/";
path2 = "C:/Users/User1/Documents/Financial/";
ShowPathInformation(path1, path2);
}
private static void ShowPathInformation(string path1, string path2)
{
var result = Path.Join(path1.AsSpan(), path2.AsSpan());
Console.WriteLine($"Concatenating '{path1}' and '{path2}'");
Console.WriteLine($" Path.Join: '{result}'");
Console.WriteLine($" Path.Combine: '{Path.Combine(path1, path2)}'");
}
}
// The example displays the following output if run on a Windows system:
// Concatenating 'C:/Program Files/' and 'Utilities/SystemUtilities'
// Path.Join: 'C:/Program Files/Utilities/SystemUtilities'
// Path.Combine: 'C:/Program Files/Utilities/SystemUtilities'
//
// Concatenating 'C:/' and '/Program Files'
// Path.Join: 'C://Program Files'
// Path.Combine: '/Program Files'
//
// Concatenating 'C:/Users/Public/Documents/' and 'C:/Users/User1/Documents/Financial/'
// Path.Join: 'C:/Users/Public/Documents/C:/Users/User1/Documents/Financial/'
// Path.Combine: 'C:/Users/User1/Documents/Financial/'
Imports System.IO
Module Example
Public Sub Main()
Dim path1 = "C:/Program Files/"
Dim path2 = "Utilities/SystemUtilities"
ShowPathInformation(path1, path2)
path1 = "C:/"
path2 = "/Program Files"
ShowPathInformation(path1, path2)
path1 = "C:/Users/Public/Documents/"
path2 = "C:/Users/User1/Documents/Financial/"
ShowPathInformation(path1, path2)
End Sub
Private Sub ShowPathInformation(path1 As String, path2 As String)
Dim result = Path.Join(path1.AsSpan(), path2.AsSpan())
Console.WriteLine($"Concatenating '{path1}' and '{path2}'")
Console.WriteLine($" Path.Join: '{result}'")
Console.WriteLine($" Path.Combine: '{Path.Combine(path1, path2)}'")
Console.WriteLine()
End Sub
End Module
' The example displays the following output if run on a Windows system:
' Concatenating 'C:/Program Files/' and 'Utilities/SystemUtilities'
' Path.Join: 'C:/Program Files/Utilities/SystemUtilities'
' Path.Combine: 'C:/Program Files/Utilities/SystemUtilities'
'
' Concatenating 'C:/' and '/Program Files'
' Path.Join: 'C:'Program Files'
' Path.Combine: '/Program Files'
'
' Concatenating 'C:/Users/Public/Documents/' and 'C:/Users/User1/Documents/Financial/'
' Path.Join: 'C:/Users/Public/Documents/C:/Users/User1/Documents/Financial/'
' Path.Combine: 'C:/Users/User1/Documents/Financial/'
설명
이 메서드는 의 끝 path1
이나 시작 path2
부분에 디렉터리 구분 기호가 아직 없는 경우 두 경로 구성 요소 간에 및 를 연결 path
하고 path2
디렉터리 구분 기호 문자를 추가합니다. 또는 path2
의 path1
가 Length 0이면 메서드는 다른 경로를 반환합니다. 및 path2
의 가 Length 모두 path1
0이면 메서드는 를 반환합니다String.Empty.
대상 플랫폼에 적합하지 않은 경로 구분 기호 문자로 끝나는 경우 path1
메서드는 Join
원래 경로 구분 기호 문자를 유지하고 지원되는 문자를 추가합니다. 이 문제는 Unix 기반 시스템에서 경로 구분 기호로 인식되지 않는 Windows 백슬래시("\") 문자를 사용하는 하드 코딩된 경로에서 발생합니다. 이 문제를 해결하려면 다음을 수행할 수 있습니다.
디렉터리 구분 기호 문자를 하드 코딩하는 대신 속성 값을 Path.DirectorySeparatorChar 검색합니다.
슬래시("/")를 디렉터리 구분 기호 문자로 사용합니다. 이 문자는 Unix 기반 시스템의 속성과 Windows 시스템의 속성에 의해 Path.AltDirectorySeparatorChar 반환 Path.DirectorySeparatorChar 됩니다.
메서드와 Combine 달리 메서드는 Join 반환된 경로를 루트하려고 시도하지 않습니다. 즉, 가 절대 경로이면 path2
메서드는 Join
메서드처럼 Combine 삭제 path1
하고 반환 path2
하지 않습니다. 다음 예제에서는 두 메서드에서 반환된 경로의 차이를 보여 줍니다. 의 원본 path2
이 사용자 입력 Combine 인 경우 메서드를 사용하면 애플리케이션이 액세스할 수 없도록 하려는 파일 시스템 리소스(예 : C:/Users/User1/Documents/Financial/ )에 액세스할 수 있습니다.
이러한 문자를 검색 와일드카드 문자에 사용할 수 있으므로 디렉터리 및 파일 이름에 대한 모든 잘못된 문자가 메서드에서 Join
허용되지 않는 것으로 해석되는 것은 아닙니다. 예를 들어 파일을 Path.Join("c:\\", "*.txt")
만들 때 유효하지 않을 수 있지만 검색 문자열로 유효합니다. 따라서 메서드가 Join
성공적으로 해석됩니다.
추가 정보
적용 대상
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>)
- Source:
- Path.cs
- Source:
- Path.cs
- Source:
- Path.cs
세 개의 경로 구성 요소를 단일 경로로 연결합니다.
public:
static System::String ^ Join(ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, ReadOnlySpan<char> path3);
public static string Join (ReadOnlySpan<char> path1, ReadOnlySpan<char> path2, ReadOnlySpan<char> path3);
static member Join : ReadOnlySpan<char> * ReadOnlySpan<char> * ReadOnlySpan<char> -> string
Public Shared Function Join (path1 As ReadOnlySpan(Of Char), path2 As ReadOnlySpan(Of Char), path3 As ReadOnlySpan(Of Char)) As String
매개 변수
- path1
- ReadOnlySpan<Char>
조인할 첫 번째 경로를 포함하는 문자 범위입니다.
- path2
- ReadOnlySpan<Char>
조인할 두 번째 경로를 포함하는 문자 범위입니다.
- path3
- ReadOnlySpan<Char>
조인할 세 번째 경로를 포함하는 문자 범위입니다.
반환
연결된 경로입니다.
예제
다음 예제에서는 및 Path.Combine(String, String, String) 메서드에서 반환 Path.Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) 된 경로의 차이를 보여 줍니다. 첫 번째 문자열이 드라이브 및 루트 디렉터리를 포함하는 정규화된 경로이고 두 번째 문자열이 첫 번째 경로의 상대 경로인 경우 두 메서드는 동일한 결과를 생성합니다. 메서드에 대한 ShowPathInformation
두 번째 및 세 번째 호출에서는 두 메서드가 반환한 문자열이 서로 다릅니다. 두 번째 메서드 호출에서 첫 번째 문자열 인수는 드라이브이고 두 번째 문자열 인수는 루팅된 디렉터리입니다. 메서드는 Join
두 문자열을 연결하고 중복 경로 구분 기호를 유지합니다. 메서드를 GetFullPath 호출하면 중복이 제거됩니다. 메서드는 Combine
드라이브를 포기하고 현재 드라이브에 루팅된 디렉터리를 반환합니다. 애플리케이션의 현재 드라이브가 C:\이고 문자열이 디렉터리의 파일 또는 파일에 액세스하는 데 사용되는 경우 D:가 아닌 C: 에 액세스합니다. 마지막으로, 에 대한 세 번째 호출 ShowPathInformation
의 마지막 인수가 루팅 Join
되므로 메서드는 처음 두 인수에 추가하여 무의미한 파일 경로를 만드는 반면 메서드는 Combine
처음 두 문자열을 삭제하고 세 번째 문자열을 반환합니다. 파일 액세스에 이 문자열을 사용하면 애플리케이션에서 중요한 파일에 의도하지 않은 액세스 권한을 부여할 수 있습니다.
using System;
using System.IO;
class Program3
{
static void Main()
{
ShowPathInformation("C:/", "users/user1/documents", "letters");
ShowPathInformation("D:/", "/users/user1/documents", "letters");
ShowPathInformation("D:/", "users/user1/documents", "C:/users/user1/documents/data");
}
private static void ShowPathInformation(string path1, string path2, string path3)
{
Console.WriteLine($"Concatenating '{path1}', '{path2}', and '{path3}'");
Console.WriteLine($" Path.Join: '{Path.Join(path1, path2, path3)}'");
Console.WriteLine($" Path.Combine: '{Path.Combine(path1, path2, path3)}'");
Console.WriteLine($" {Path.GetFullPath(Path.Join(path1, path2, path3))}");
}
}
// The example displays the following output if run on a Windows system:
// Concatenating 'C:/', 'users/user1/documents', and 'letters'
// Path.Join: 'C:/users/user1/documents\letters'
// Path.Combine: 'C:/users/user1/documents\letters'
// C:\users\user1\documents\letters
// Concatenating 'D:/', '/users/user1/documents', and 'letters'
// Path.Join: 'D://users/user1/documents\letters'
// Path.Combine: '/users/user1/documents\letters'
// D:\users\user1\documents\letters
// Concatenating 'D:/', 'users/user1/documents', and 'C:/users/user1/documents/data'
// Path.Join: 'D:/users/user1/documents\C:/users/user1/documents/data'
// Path.Combine: 'C:/users/user1/documents/data'
// D:\users\user1\documents\C:\users\user1\documents\data
Imports System.IO
Module Program
Public Sub Main()
Dim path1 As String = "C:/"
Dim path2 As String = "users/user1/documents"
Dim path3 As String = "letters"
ShowPathInformation(path1, path2, path3)
path1 = "D:/"
path2 = "/users/user1/documents"
path3 = "letters"
ShowPathInformation(path1, path2, path3)
path1 = "D:/"
path2 = "users/user1/documents"
path3 = "C:/users/user1/documents/data"
ShowPathInformation(path1, path2, path3)
End Sub
Private Sub ShowPathInformation(path1 As String, path2 As String, path3 As String)
Dim result = Path.Join(path1.AsSpan(), path2.AsSpan(), path3.AsSpan())
Console.WriteLine($"Concatenating '{path1}, '{path2}', and `{path3}'")
Console.WriteLine($" Path.Join: '{result}'")
Console.WriteLine($" Path.Combine: '{Path.Combine(path1, path2, path3)}'")
End Sub
End Module
' The example displays the following output if run on a Windows system:
' Concatenating 'C:/, 'users/user1/documents', and `letters'
' Path.Join: 'C:/users/user1/documents\letters'
' Path.Combine: 'C:/users/user1/documents\letters'
'
' Concatenating 'D:/, '/users/user1/documents', and `letters'
' Path.Join: 'D:'users/user1/documents\letters'
' Path.Combine: '/users/user1/documents\letters'
'
' Concatenating 'D:/, 'users/user1/documents', and `C:/users/user1/documents/data'
' Path.Join: 'D:/users/user1/documents\C:/users/user1/documents/data'
' Path.Combine: 'C:/users/user1/documents/data'
설명
이 메서드는 , 및 path2
를 연결path
하고 path3
경로 구성 요소가 아직 없는 경우 디렉터리 구분 기호 문자를 추가합니다. Length, path2
또는 path3
인수의 path1
가 0이면 메서드는 나머지 인수를 연결합니다. 모든 구성 요소의 가 ReadOnlySpan<T>.Length 0이면 메서드는 를 반환합니다 String.Empty.
또는 path2
가 대상 플랫폼 Join
에 적합하지 않은 경로 구분 기호 문자로 끝나는 경우 path1
메서드는 원래 경로 구분 기호 문자를 유지하고 지원되는 문자를 추가합니다. 이 문제는 Unix 기반 시스템에서 경로 구분 기호로 인식되지 않는 Windows 백슬래시("\") 문자를 사용하는 하드 코딩된 경로에서 발생합니다. 이 문제를 해결하려면 다음을 수행할 수 있습니다.
디렉터리 구분 기호 문자를 하드 코딩하는 대신 속성 값을 Path.DirectorySeparatorChar 검색합니다.
슬래시("/")를 디렉터리 구분 기호 문자로 사용합니다. 이 문자는 Unix 기반 시스템의 속성과 Windows 시스템의 속성에 의해 Path.AltDirectorySeparatorChar 반환 Path.DirectorySeparatorChar 됩니다.
메서드와 Combine 달리 메서드는 Join 반환된 경로를 루트하려고 시도하지 않습니다. 즉, 또는 path3
가 절대 경로인 경우 path2
메서드는 Join
메서드처럼 Combine 이전 경로를 삭제하지 않습니다.
이러한 문자를 검색 와일드카드 문자에 사용할 수 있으므로 디렉터리 및 파일 이름에 대한 모든 잘못된 문자가 메서드에서 Join
허용되지 않는 것으로 해석되는 것은 아닙니다. 예를 들어 파일을 Path.Join("c:\\", "temp", "*.txt")
만들 때 유효하지 않을 수 있지만 검색 문자열로 유효합니다. 따라서 메서드가 Join
성공적으로 해석됩니다.
추가 정보
적용 대상
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기