Path.Join Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Overloads
| Name | Description |
|---|---|
| Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>) |
Voegt twee padonderdelen samen in één pad. |
| Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) |
Voegt drie padonderdelen samen in één pad. |
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>)
Voegt twee padonderdelen samen in één pad.
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
Parameters
- path1
- ReadOnlySpan<Char>
Een tekenspanne die het eerste pad bevat dat moet worden samengevoegd.
- path2
- ReadOnlySpan<Char>
Een tekenspanne die het tweede pad bevat dat moet worden samengevoegd.
Retouren
De gecombineerde paden.
Voorbeelden
In het volgende voorbeeld ziet u het verschil in de paden die door de Path.Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>) en Path.Combine(String, String) methoden worden geretourneerd. Wanneer de eerste tekenreeks een volledig gekwalificeerd pad is dat een station en hoofdmap bevat en de tweede een relatief pad is van het eerste pad, produceren de twee methoden identieke resultaten. In de tweede en derde aanroept de ShowPathInformation methode de tekenreeksen die door de twee methoden worden geretourneerd. In de tweede methode-aanroep is het eerste tekenreeksargument een station, terwijl de tweede een geroote map is. De Join methode voegt de twee tekenreeksen samen en behoudt dubbele padscheidingstekens. De Combine methode verlaat het station en retourneert een geroote map op het huidige station. Als het huidige station van de toepassing C:\ is en de tekenreeks wordt gebruikt voor toegang tot een bestand of bestanden in de map, krijgt deze toegang tot C: in plaats van D:. Ten slotte, omdat beide argumenten in de derde aanroep zijn ShowPathInformation geroot, voegt de Join methode ze gewoon toe om een niet-logisch bestandspad te maken, terwijl de Combine methode de eerste tekenreeks negeert en de tweede retourneert. Het gebruik van deze tekenreeks voor bestandstoegang kan de toepassing onbedoelde toegang geven tot gevoelige bestanden.
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/'
Opmerkingen
Met deze methode voegt u gewoon pathpath2 een adreslijstscheidingsteken toe tussen de twee padonderdelen als deze nog niet aanwezig zijn aan het einde of path1 het begin van path2. Als de Length waarde van of path2path1 nul is, retourneert de methode het andere pad. Als beide Lengthpath1 en path2 nul zijn, retourneert String.Emptyde methode .
Als path1 het padscheidingsteken eindigt dat niet geschikt is voor het doelplatform, blijft het Join oorspronkelijke padscheidingsteken behouden en wordt het ondersteunde teken toegevoegd. Dit probleem doet zich voor in code vastgelegde paden die gebruikmaken van het Windows backslashteken ("\") dat niet wordt herkend als padscheidingsteken op Unix-systemen. U kunt het volgende doen om dit probleem te omzeilen:
Haal de waarde van de Path.DirectorySeparatorChar eigenschap op in plaats van een adreslijstscheidingsteken hard te coderen.
Gebruik een slash (/) als het adreslijstscheidingsteken. Dit teken wordt geretourneerd door de eigenschap Path.DirectorySeparatorChar op Unix-systemen en door de eigenschap Path.AltDirectorySeparatorChar op Windows systemen.
In tegenstelling tot de Combine methode probeert de Join methode het geretourneerde pad niet te rooten. (Als path2 dit een absoluut pad is, wordt de Join methode niet verwijderd path1 en geretourneerd path2 zoals de Combine methode dat wel doet.) In het volgende voorbeeld ziet u het verschil in de paden die door de twee methoden worden geretourneerd. Als de bron van path2 gebruikersinvoer is, maakt de Combine methode het mogelijk voor een gebruiker om toegang te krijgen tot een bestandssysteemresource (zoals C:/Users/User1/Documents/Financial/ in het geval van het voorbeeld) dat de toepassing niet van plan was om toegankelijk te maken.
Niet alle ongeldige tekens voor map- en bestandsnamen worden door de Join methode geïnterpreteerd als onaanvaardbaar, omdat u deze tekens kunt gebruiken om jokertekens te zoeken. Hoewel Path.Join("c:\\", "*.txt") het bijvoorbeeld ongeldig kan zijn bij het maken van een bestand, is het geldig als een zoektekenreeks. De Join methode interpreteert deze daarom met succes.
Zie ook
Van toepassing op
Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>)
Voegt drie padonderdelen samen in één pad.
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
Parameters
- path1
- ReadOnlySpan<Char>
Een tekenspanne die het eerste pad bevat dat moet worden samengevoegd.
- path2
- ReadOnlySpan<Char>
Een tekenspanne die het tweede pad bevat dat moet worden samengevoegd.
- path3
- ReadOnlySpan<Char>
Een tekenspanne die het derde pad bevat dat moet worden samengevoegd.
Retouren
Het samengevoegde pad.
Voorbeelden
In het volgende voorbeeld ziet u het verschil in de paden die door de Path.Join(ReadOnlySpan<Char>, ReadOnlySpan<Char>, ReadOnlySpan<Char>) en Path.Combine(String, String, String) methoden worden geretourneerd. Wanneer de eerste tekenreeks een volledig gekwalificeerde pad is dat een station en hoofdmap bevat en de tweede een relatief pad is van het eerste pad, produceren de twee methoden identieke resultaten. In de tweede en derde aanroept de ShowPathInformation methode de tekenreeksen die door de twee methoden worden geretourneerd. In de tweede methode-aanroep is het eerste tekenreeksargument een station, terwijl de tweede een geroote map is. De Join methode voegt de twee tekenreeksen samen en behoudt dubbele padscheidingstekens. Een aanroep naar de GetFullPath methode elimineert de duplicatie. De Combine methode verlaat het station en retourneert een geroote map op het huidige station. Als het huidige station van de toepassing C:\ is en de tekenreeks wordt gebruikt voor toegang tot een bestand of bestanden in de map, krijgt deze toegang tot C: in plaats van D:. Ten slotte, omdat het laatste argument in de derde aanroep om te ShowPathInformation zijn geroot, voegt de Join methode deze toe aan de eerste twee argumenten om een niet-logisch bestandspad te maken, terwijl de Combine methode de eerste twee tekenreeksen negeert en de derde retourneert. Het gebruik van deze tekenreeks voor bestandstoegang kan de toepassing onbedoelde toegang geven tot gevoelige bestanden.
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'
Opmerkingen
Met deze methode voegt u eenvoudigweg pathpath2path3 een adreslijstscheidingsteken toe tussen een van de padonderdelen als deze nog niet aanwezig is. Als de ofe path1of path2path3 de Length argumenten nul is, voegt de methode de resterende argumenten samen. Als de ReadOnlySpan<T>.Length van alle onderdelen nul is, retourneert String.Emptyde methode .
Als path1 of path2 eindigt op een padscheidingsteken dat niet geschikt is voor het doelplatform, behoudt de Join methode het oorspronkelijke padscheidingsteken en voegt het ondersteunde teken toe. Dit probleem doet zich voor in code vastgelegde paden die gebruikmaken van het Windows backslashteken ("\") dat niet wordt herkend als padscheidingsteken op Unix-systemen. U kunt het volgende doen om dit probleem te omzeilen:
Haal de waarde van de Path.DirectorySeparatorChar eigenschap op in plaats van een adreslijstscheidingsteken hard te coderen.
Gebruik een slash (/) als het adreslijstscheidingsteken. Dit teken wordt geretourneerd door de eigenschap Path.DirectorySeparatorChar op Unix-systemen en door de eigenschap Path.AltDirectorySeparatorChar op Windows systemen.
In tegenstelling tot de Combine methode probeert de Join methode het geretourneerde pad niet te rooten. (Dat wil wel, als path2 of path3 een absoluut pad is, de Join methode negeert de vorige paden niet zoals de Combine methode dat wel doet.)
Niet alle ongeldige tekens voor map- en bestandsnamen worden door de Join methode geïnterpreteerd als onaanvaardbaar, omdat u deze tekens kunt gebruiken om jokertekens te zoeken. Hoewel Path.Join("c:\\", "temp", "*.txt") het bijvoorbeeld ongeldig kan zijn bij het maken van een bestand, is het geldig als een zoektekenreeks. De Join methode interpreteert deze daarom met succes.