共用方式為


Path.Join 方法

定義

多載

Join(String, String, String, String)

將四個路徑串連成單一路徑。

Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>)

將四個路徑元件串連成單一路徑。

Join(String, String, String)

將三個路徑串連成單一路徑。

Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>)

將三個路徑元件串連成單一路徑。

Join(ReadOnlySpan<String>)

將路徑範圍串連成單一路徑。

Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>)

將兩個路徑元件串連成單一路徑。

Join(String[])

將路徑陣列串連成單一路徑。

Join(String, String)

將兩個路徑串連成單一路徑。

Join(String, String, String, String)

來源:
Path.cs
來源:
Path.cs
來源:
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

要聯結的第四個路徑。

傳回

串連路徑。

備註

這個方法只會串連 pathpath2path3path4,並在其中一個路徑元件之間新增目錄分隔符,如果尚未存在的話。 如果任何 path1path2path3path4 自變數的長度為零,則方法會串連其餘的自變數。 如果產生的串連字串長度為零,方法會傳回 String.Empty

如果 path1path2path3 結尾為不適合目標平台的路徑分隔符,則 Join 方法會保留原始路徑分隔符,並附加支援的分隔符。 此問題發生在使用 Windows 反斜杠 (“\”) 字元的硬式編碼路徑中,此字元在 Unix 系統上無法辨識為路徑分隔符。 若要解決此問題,您可以:

不同於 Combine 方法,Join 方法不會嘗試根目錄傳回的路徑。 (也就是說,如果 path2path3path4 是絕對路徑,則 Join 方法不會像 Combine 方法一樣捨棄先前的路徑。

並非所有無效的目錄和檔名字符都會被 Join 方法解譯為無法接受,因為您可以使用這些字元來搜尋通配符。 例如,雖然建立檔案時 Path.Join("c:\\", "temp", "*.txt") 可能無效,但它在搜尋字串中是有效的。 因此,Join 方法會成功解譯它。

適用於

Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>)

來源:
Path.cs
來源:
Path.cs
來源:
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>

包含要聯結之第四個路徑的字元範圍。

傳回

串連路徑。

備註

這個方法只會串連 pathpath2path3path4,並在其中一個路徑元件之間新增目錄分隔符,如果尚未存在的話。 如果任何 path1path2path3path4 自變數的 Length 為零,則方法會串連其餘的自變數。 如果所有元件的 ReadOnlySpan<T>.Length 為零,方法會傳回 String.Empty

如果 path1path2path3 結尾為不適合目標平台的路徑分隔符,則 Join 方法會保留原始路徑分隔符,並附加支援的分隔符。 此問題發生在使用 Windows 反斜杠 (“\”) 字元的硬式編碼路徑中,此字元在 Unix 系統上無法辨識為路徑分隔符。 若要解決此問題,您可以:

不同於 Combine 方法,Join 方法不會嘗試根目錄傳回的路徑。 (也就是說,如果 path2path3path4 是絕對路徑,則 Join 方法不會像 Combine 方法一樣捨棄先前的路徑。

並非所有無效的目錄和檔名字符都會被 Join 方法解譯為無法接受,因為您可以使用這些字元來搜尋通配符。 例如,雖然建立檔案時 Path.Join("c:\\", "temp", "*.txt") 可能無效,但它在搜尋字串中是有效的。 因此,Join 方法會成功解譯它。

適用於

Join(String, String, String)

來源:
Path.cs
來源:
Path.cs
來源:
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

要聯結的第三個路徑。

傳回

串連路徑。

備註

這個方法只會串連 pathpath2path3,並在其中一個路徑元件之間加入一個目錄分隔符,如果尚未存在的話。 如果任何 path1path2path3 自變數的長度為零,則方法會串連其餘的自變數。 如果產生的串連字串長度為零,方法會傳回 String.Empty

如果 path1path2 以不適合目標平臺的路徑分隔符結尾,Join 方法會保留原始路徑分隔符,並附加支援的分隔符。 此問題發生在使用 Windows 反斜杠 (“\”) 字元的硬式編碼路徑中,此字元在 Unix 系統上無法辨識為路徑分隔符。 若要解決此問題,您可以:

不同於 Combine 方法,Join 方法不會嘗試根目錄傳回的路徑。 (也就是說,如果 path2path3 是絕對路徑,Join 方法不會像 Combine 方法一樣捨棄先前的路徑。

並非所有無效的目錄和檔名字符都會被 Join 方法解譯為無法接受,因為您可以使用這些字元來搜尋通配符。 例如,雖然建立檔案時 Path.Join("c:\\", "temp", "*.txt") 可能無效,但它在搜尋字串中是有效的。 因此,Join 方法會成功解譯它。

適用於

Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>)

來源:
Path.cs
來源:
Path.cs
來源:
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.Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>)Path.Combine(String, String, String) 方法所傳回路徑的差異。 當第一個字串是包含磁碟驅動器和根目錄的完整路徑,而第二個字元串是來自第一個路徑的相對路徑時,這兩種方法會產生相同的結果。 在第二次和第三次呼叫 ShowPathInformation 方法時,兩個方法所傳回的字串會分位。 在第二個方法呼叫中,第一個字元串自變數是磁碟驅動器,而第二個是根目錄。 Join 方法會串連兩個字串,並保留重複的路徑分隔符。 呼叫 GetFullPath 方法將會消除重複。 Combine 方法會放棄磁碟驅動器,並傳回目前磁碟驅動器上的根目錄。 如果應用程式的目前磁碟驅動器是 C:\ ,而且字串是用來存取目錄中的檔案或檔案,則會存取 C: 而不是 D:。 最後,因為第三次呼叫 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'

備註

這個方法只會串連 pathpath2path3,並在其中一個路徑元件之間加入一個目錄分隔符,如果尚未存在的話。 如果任何 path1path2path3 自變數的 Length 為零,則方法會串連其餘的自變數。 如果所有元件的 ReadOnlySpan<T>.Length 為零,方法會傳回 String.Empty

如果 path1path2 以不適合目標平臺的路徑分隔符結尾,Join 方法會保留原始路徑分隔符,並附加支援的分隔符。 此問題發生在使用 Windows 反斜杠 (“\”) 字元的硬式編碼路徑中,此字元在 Unix 系統上無法辨識為路徑分隔符。 若要解決此問題,您可以:

不同於 Combine 方法,Join 方法不會嘗試根目錄傳回的路徑。 (也就是說,如果 path2path3 是絕對路徑,Join 方法不會像 Combine 方法一樣捨棄先前的路徑。

並非所有無效的目錄和檔名字符都會被 Join 方法解譯為無法接受,因為您可以使用這些字元來搜尋通配符。 例如,雖然建立檔案時 Path.Join("c:\\", "temp", "*.txt") 可能無效,但它在搜尋字串中是有效的。 因此,Join 方法會成功解譯它。

另請參閱

適用於

Join(ReadOnlySpan<String>)

將路徑範圍串連成單一路徑。

public:
 static System::String ^ Join(ReadOnlySpan<System::String ^> paths);
public static string Join (scoped ReadOnlySpan<string?> paths);
static member Join : ReadOnlySpan<string> -> string
Public Shared Function Join (paths As ReadOnlySpan(Of String)) As String

參數

paths
ReadOnlySpan<String>

路徑範圍。

傳回

串連路徑。

適用於

Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>)

來源:
Path.cs
來源:
Path.cs
來源:
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.Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>)Path.Combine(String, String) 方法所傳回路徑的差異。 當第一個字串是包含磁碟驅動器和根目錄的完整路徑,而第二個是來自第一個路徑的相對路徑時,這兩種方法會產生相同的結果。 在第二次和第三次呼叫 ShowPathInformation 方法時,兩個方法所傳回的字串會分位。 在第二個方法呼叫中,第一個字元串自變數是磁碟驅動器,而第二個是根目錄。 Join 方法會串連兩個字串,並保留重複的路徑分隔符。 Combine 方法會放棄磁碟驅動器,並傳回目前磁碟驅動器上的根目錄。 如果應用程式的目前磁碟驅動器是 C:\ ,而且字串是用來存取目錄中的檔案或檔案,則會存取 C: 而不是 D:。 最後,由於第三次呼叫 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/'

備註

這個方法只會串連 pathpath2,並在兩個路徑元件之間新增目錄分隔符,如果 path1 結尾或 path2開頭還不存在的話。 如果 path1path2Length 為零,則方法會傳回另一個路徑。 如果 path1path2Length 都是零,則方法會傳回 String.Empty

如果 path1 以不適合目標平臺的路徑分隔符結尾,Join 方法會保留原始路徑分隔符,並附加支援的分隔符。 此問題發生在使用 Windows 反斜杠 (“\”) 字元的硬式編碼路徑中,此字元在 Unix 系統上無法辨識為路徑分隔符。 若要解決此問題,您可以:

不同於 Combine 方法,Join 方法不會嘗試根目錄傳回的路徑。 (也就是說,如果 path2 是絕對路徑,Join 方法不會捨棄 path1,並傳回 path2,就像 Combine 方法一樣。下列範例說明兩種方法所傳回路徑的差異。 如果 path2 的來源是使用者輸入,Combine 方法可讓使用者存取檔系統資源(例如,C:/Users/User1/Documents/Financial/,而應用程式不打算存取。

並非所有無效的目錄和檔名字符都會被 Join 方法解譯為無法接受,因為您可以使用這些字元來搜尋通配符。 例如,雖然建立檔案時 Path.Join("c:\\", "*.txt") 可能無效,但它在搜尋字串中是有效的。 因此,Join 方法會成功解譯它。

另請參閱

適用於

Join(String[])

來源:
Path.cs
來源:
Path.cs
來源:
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 中的所有字串,並在任何路徑元件之間加入目錄分隔符。 如果 paths 中任何路徑的 Length 為零,則方法會串連其餘自變數。 如果產生的串連字串長度為零,方法會傳回 String.Empty

如果 paths中的任何路徑,但最後一個路徑除外,則以不適合目標平臺的路徑分隔符結尾,則 Join 方法會保留原始路徑分隔符,並附加支援的分隔符。 此問題發生在使用 Windows 反斜杠 (“\”) 字元的硬式編碼路徑中,此字元在 Unix 系統上無法辨識為路徑分隔符。 若要解決此問題,您可以:

不同於 Combine 方法,Join 方法不會嘗試根目錄傳回的路徑。 (也就是說,如果 paths中的任何路徑,除了第一個路徑之外,是絕對路徑,Join 方法不會捨棄先前的路徑,就像 Combine 方法一樣。

並非所有無效的目錄和檔名字符都會被 Join 方法解譯為無法接受,因為您可以使用這些字元來搜尋通配符。 例如,雖然建立檔案時 Path.Join("c:\\", "temp", "*.txt") 可能無效,但它在搜尋字串中是有效的。 因此,Join 方法會成功解譯它。

適用於

Join(String, String)

來源:
Path.cs
來源:
Path.cs
來源:
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

要聯結的第二個路徑。

傳回

串連路徑。

備註

如果路徑元件尚未存在,這個方法只會串連 pathpath2,並在任何路徑元件之間新增目錄分隔符。 如果 path1path2 的長度為零,則方法會串連其餘自變數。 如果產生的串連字串長度為零,方法會傳回 String.Empty

如果 path1 以不適合目標平臺的路徑分隔符結尾,Join 方法會保留原始路徑分隔符,並附加支援的分隔符。 此問題發生在使用 Windows 反斜杠 (“\”) 字元的硬式編碼路徑中,此字元在 Unix 系統上無法辨識為路徑分隔符。 若要解決此問題,您可以:

不同於 Combine 方法,Join 方法不會嘗試根目錄傳回的路徑。 (也就是說,如果 path2 是絕對路徑,Join 方法不會像 Combine 方法一樣捨棄先前的路徑。

並非所有無效的目錄和檔名字符都會被 Join 方法解譯為無法接受,因為您可以使用這些字元來搜尋通配符。 例如,雖然建立檔案時 Path.Join("c:\\", "temp", "*.txt") 可能無效,但它在搜尋字串中是有效的。 因此,Join 方法會成功解譯它。

適用於