Path.Join Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Överlagringar
| Name | Description |
|---|---|
| Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>) |
Sammanfogar två sökvägskomponenter till en enda sökväg. |
| Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) |
Sammanfogar tre sökvägskomponenter till en enda sökväg. |
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>)
Sammanfogar två sökvägskomponenter till en enda sökväg.
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
Parametrar
- path1
- ReadOnlySpan<Char>
Ett teckenintervall som innehåller den första sökvägen som ska kopplas.
- path2
- ReadOnlySpan<Char>
Ett teckenintervall som innehåller den andra sökvägen som ska kopplas.
Returer
De kombinerade sökvägarna.
Exempel
I följande exempel visas skillnaden i sökvägarna som returneras av Path.Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>) metoderna och Path.Combine(String, String) . När den första strängen är en fullständigt kvalificerad sökväg som innehåller en enhet och en rotkatalog och den andra är en relativ sökväg från den första sökvägen, ger de två metoderna identiska resultat. I det andra och tredje anropet ShowPathInformation till metoden avviker strängarna som returneras av de två metoderna. I det andra metodanropet är det första strängargumentet en enhet, medan det andra är en rotad katalog. Metoden Join sammanfogar de två strängarna och bevarar dubblettsökvägsavgränsare. Metoden Combine överger enheten och returnerar en rotad katalog på den aktuella enheten. Om programmets aktuella enhet är C:\ och strängen används för att komma åt en fil eller filer i katalogen, skulle den komma åt C: i stället för D:. Eftersom båda argumenten i det tredje anropet Join till ShowPathInformation är rotade lägger metoden helt enkelt till dem för att skapa en meningslös filsökväg, medan Combine metoden tar bort den första strängen och returnerar den andra. Om du använder den här strängen för filåtkomst kan programmet få oavsiktlig åtkomst till känsliga filer.
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/'
Kommentarer
Den här metoden sammanfogar path och path2 lägger till ett katalogavgränsartecken mellan de två sökvägskomponenterna om en inte redan finns i slutet av path1 eller början av path2. Om antingen Lengthpath1 eller path2 är noll returnerar metoden den andra sökvägen. Om både Lengthpath1 och path2 är noll returnerar String.Emptymetoden .
Om path1 slutar med ett sökvägsavgränsartecken som inte är lämpligt för målplattformen Join bevarar metoden det ursprungliga sökvägsavgränsartecknet och lägger till det som stöds. Det här problemet uppstår i hårdkodade sökvägar som använder tecknet Windows omvänt snedstreck ("\") som inte identifieras som en sökvägsavgränsare i Unix-baserade system. Du kan lösa det här problemet genom att:
Hämta värdet för Path.DirectorySeparatorChar egenskapen i stället för att hårdkoda ett katalogavgränsartecken.
Använd ett snedstreck ("/") som katalogavgränsare. Det här tecknet returneras av egenskapen Path.DirectorySeparatorChar på Unix-baserade system och av egenskapen Path.AltDirectorySeparatorChar på Windows system.
Combine Till skillnad från metoden Join försöker metoden inte rota den returnerade sökvägen. (Om path2 är en absolut sökväg Join tar metoden inte bort path1 och returnerar path2 inte som Combine metoden gör.) I följande exempel visas skillnaden i sökvägarna som returneras av de två metoderna. Om källan till är användarindata Combine gör metoden det möjligt för en användare att komma åt en filsystemresurs (till exempel C:/Users/User1/Documents/Financial/ i fallet med exemplet) som programmet inte hade för avsikt att göra tillgängligt.path2
Alla ogiltiga tecken för katalog- och filnamn tolkas inte som oacceptabla av Join metoden eftersom du kan använda dessa tecken för att söka efter jokertecken. Även om Path.Join("c:\\", "*.txt") det till exempel kan vara ogiltigt när du skapar en fil är den giltig som en söksträng. Metoden Join tolkar den därför korrekt.
Se även
Gäller för
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>)
Sammanfogar tre sökvägskomponenter till en enda sökväg.
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
Parametrar
- path1
- ReadOnlySpan<Char>
Ett teckenintervall som innehåller den första sökvägen som ska kopplas.
- path2
- ReadOnlySpan<Char>
Ett teckenintervall som innehåller den andra sökvägen som ska kopplas.
- path3
- ReadOnlySpan<Char>
Ett teckenintervall som innehåller den tredje sökvägen som ska kopplas.
Returer
Den sammanfogade sökvägen.
Exempel
I följande exempel visas skillnaden i sökvägarna som returneras av Path.Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) metoderna och Path.Combine(String, String, String) . När den första strängen är en fullständigt kvalificerad sökväg som innehåller en enhet och en rotkatalog och den andra är en relativ sökväg från den första sökvägen, ger de två metoderna identiska resultat. I det andra och tredje anropet ShowPathInformation till metoden avviker strängarna som returneras av de två metoderna. I det andra metodanropet är det första strängargumentet en enhet, medan det andra är en rotad katalog. Metoden Join sammanfogar de två strängarna och bevarar dubblettsökvägsavgränsare. Ett anrop till GetFullPath metoden skulle eliminera dupliceringen. Metoden Combine överger enheten och returnerar en rotad katalog på den aktuella enheten. Om programmets aktuella enhet är C:\ och strängen används för att komma åt en fil eller filer i katalogen, skulle den komma åt C: i stället för D:. Slutligen, eftersom det sista argumentet i det tredje anropet till ShowPathInformation är rotade lägger Join metoden helt enkelt till det i de två första argumenten för att skapa en meningslös filsökväg, medan Combine metoden tar bort de två första strängarna och returnerar den tredje. Om du använder den här strängen för filåtkomst kan programmet få oavsiktlig åtkomst till känsliga filer.
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'
Kommentarer
Den här metoden sammanfogar pathbara , path2och path3 lägger till ett katalogavgränsartecken mellan någon av sökvägskomponenterna om det inte redan finns någon. Om något av argumenten Length i , path2eller path3 är noll sammanfogar metoden de återstående argumenten.path1 Om alla ReadOnlySpan<T>.Length komponenter är noll returnerar String.Emptymetoden .
Om path1 eller path2 slutar med ett sökvägsavgränsartecken som inte är lämpligt för målplattformen Join bevarar metoden det ursprungliga sökvägsavgränsartecknet och lägger till det som stöds. Det här problemet uppstår i hårdkodade sökvägar som använder tecknet Windows omvänt snedstreck ("\") som inte identifieras som en sökvägsavgränsare i Unix-baserade system. Du kan lösa det här problemet genom att:
Hämta värdet för Path.DirectorySeparatorChar egenskapen i stället för att hårdkoda ett katalogavgränsartecken.
Använd ett snedstreck ("/") som katalogavgränsare. Det här tecknet returneras av egenskapen Path.DirectorySeparatorChar på Unix-baserade system och av egenskapen Path.AltDirectorySeparatorChar på Windows system.
Combine Till skillnad från metoden Join försöker metoden inte rota den returnerade sökvägen. (Om path2 eller path3 är en absolut sökväg Join tar metoden inte bort de tidigare sökvägarna som Combine metoden gör.)
Alla ogiltiga tecken för katalog- och filnamn tolkas inte som oacceptabla av Join metoden eftersom du kan använda dessa tecken för att söka efter jokertecken. Även om Path.Join("c:\\", "temp", "*.txt") det till exempel kan vara ogiltigt när du skapar en fil är den giltig som en söksträng. Metoden Join tolkar den därför korrekt.