Path.Combine Метод

Определение

Объединяет строки в путь.

Перегрузки

Combine(String[])

Объединяет массив строк в путь.

Combine(String, String)

Объединяет две строки в путь.

Combine(String, String, String)

Объединяет три строки в путь.

Combine(String, String, String, String)

Объединяет четыре строки в путь.

Комментарии

Этот метод предназначен для объединения отдельных строк в одну строку, представляющую путь к файлу. Однако если аргумент, отличный от первого, содержит корневой путь, все предыдущие компоненты пути игнорируются, а возвращаемая строка начинается с этого компонента корневого пути. В качестве альтернативы методу Combine рекомендуется использовать методы Join или TryJoin .

Важно!

Этот метод предполагает, что первый аргумент является абсолютным путем, а следующий аргумент или аргументы являются относительными путями. Если это не так, и особенно если любые последующие аргументы являются строками, введенными пользователем, вызовите Join вместо этого метод или TryJoin .

Combine(String[])

Объединяет массив строк в путь.

public:
 static System::String ^ Combine(... cli::array <System::String ^> ^ paths);
public static string Combine (params string[] paths);
static member Combine : string[] -> string
Public Shared Function Combine (ParamArray paths As String()) As String

Параметры

paths
String[]

Массив частей пути.

Возвращаемое значение

String

Объединенные пути.

Исключения

платформа .NET Framework и .NET Core версий старше 2.1: одна из строк в массиве содержит один или несколько недопустимых символов, определенных в GetInvalidPathChars().

Одна из строк в массиве имеет значение null.

Примеры

В следующем примере массив строк объединяется в путь.

string[] paths = {@"d:\archives", "2001", "media", "images"};
string fullPath = Path.Combine(paths);
Console.WriteLine(fullPath);
Dim paths As String() = {"d:\archives", "2001", "media", "images"}
Dim fullPath As String = Path.Combine(paths)
Console.WriteLine(fullPath)

Комментарии

paths должен быть массивом частей пути для объединения. Если один из последующих путей является абсолютным, операция объединения сбрасывается, начиная с этого абсолютного пути, отменяя все предыдущие объединенные пути.

Если какой-либо элемент в , paths но последний не является диском и не заканчивается символом DirectorySeparatorChar или AltDirectorySeparatorChar , Combine метод добавляет символ между этим элементом DirectorySeparatorChar и следующим. Обратите внимание, что если элемент заканчивается символом разделителя пути, который не подходит для целевой платформы, Combine метод сохраняет исходный символ разделителя пути и добавляет поддерживаемый. В следующем примере сравнивается результат в системах Windows и Unix, когда обратная косая черта используется в качестве символа разделителя пути.

string[] paths = {@"d:\archives", "2001", "media", "images"};
string fullPath = Path.Combine(paths);
Console.WriteLine(fullPath);            

paths = new string[] {@"d:\archives\", @"2001\", "media", "images"};
fullPath = Path.Combine(paths);
Console.WriteLine(fullPath); 

paths = new string[] {"d:/archives/", "2001/", "media", "images"};
fullPath = Path.Combine(paths);
Console.WriteLine(fullPath); 
// The example displays the following output if run on a Windows system:
//    d:\archives\2001\media\images
//    d:\archives\2001\media\images
//    d:/archives/2001/media\images
//
// The example displays the following output if run on a Unix-based system:
//    d:\archives/2001/media/images
//    d:\archives\/2001\/media/images
//    d:/archives/2001/media/images
Dim paths As String() = { "d:\archives", "2001", "media", "images" }
Dim fullPath As String = Path.Combine(paths)
Console.WriteLine(fullPath)            

paths = { "d:\archives\", "2001\", "media", "images" }
fullPath = Path.Combine(paths)
Console.WriteLine(fullPath) 

paths = { "d:/archives/", "2001/", "media", "images" }
fullPath = Path.Combine(paths)
Console.WriteLine(fullPath) 
' The example displays the following output if run on a Windows system:
'    d:\archives\2001\media\images
'    d:\archives\2001\media\images
'    d:/archives/2001/media\images
'
' The example displays the following output if run on a Linux system:
'    d:\archives/2001/media/images
'    d:\archives\/2001\/media/images
'    d:/archives/2001/media/images

Строки нулевой длины опущены в объединенном пути.

Параметры не анализируются, если они имеют пробелы.

платформа .NET Framework и .NET Core более ранних версий, чем 2.1. Не все недопустимые символы для имен каталогов и файлов интерпретируются методом Combine как неприемлемые, так как эти символы можно использовать для поиска подстановочных знаков. Например, если Path.Combine("c:\\", "*.txt") вы хотите создать файл из него, он может быть недопустимым, но он является допустимым в качестве строки поиска. Поэтому он успешно интерпретируется методом Combine .

См. также раздел

Применяется к

Combine(String, String)

Объединяет две строки в путь.

public:
 static System::String ^ Combine(System::String ^ path1, System::String ^ path2);
public static string Combine (string path1, string path2);
static member Combine : string * string -> string
Public Shared Function Combine (path1 As String, path2 As String) As String

Параметры

path1
String

Первый путь для объединения.

path2
String

Второй путь для объединения.

Возвращаемое значение

String

Объединенные пути. Если один из указанных путей является строкой нулевой длины, этот метод возвращает другой путь. Если в качестве значения параметра path2 задан абсолютный путь, этот метод возвращает path2.

Исключения

платформа .NET Framework и .NET Core версий старше 2.1: path1 или path2 содержит один или несколько недопустимых символов, определенных в GetInvalidPathChars().

Параметр path1 или path2 имеет значение null.

Примеры

В следующем примере показано использование Combine метода на классической платформе Windows.

using namespace System;
using namespace System::IO;
void CombinePaths( String^ p1, String^ p2 )
{
   try
   {
      String^ combination = Path::Combine( p1, p2 );
      Console::WriteLine( "When you combine '{0}' and '{1}', the result is: {2}'{3}'", p1, p2, Environment::NewLine, combination );
   }
   catch ( Exception^ e ) 
   {
      if (p1 == nullptr)
         p1 = "nullptr";
      if (p2 == nullptr)
         p2 = "nullptr";
      Console::WriteLine( "You cannot combine '{0}' and '{1}' because: {2}{3}", p1, p2, Environment::NewLine, e->Message );
   }

   Console::WriteLine();
}

int main()
{
   String^ path1 = "c:\\temp";
   String^ path2 = "subdir\\file.txt";
   String^ path3 = "c:\\temp.txt";
   String^ path4 = "c:^*&)(_=@#'\\^&#2.*(.txt";
   String^ path5 = "";
   String^ path6 = nullptr;
   CombinePaths( path1, path2 );
   CombinePaths( path1, path3 );
   CombinePaths( path3, path2 );
   CombinePaths( path4, path2 );
   CombinePaths( path5, path2 );
   CombinePaths( path6, path2 );
}
using System;
using System.IO;

public class ChangeExtensionTest {

    public static void Main() {

        string path1 = "c:\\temp";
        string path2 = "subdir\\file.txt";
        string path3 = "c:\\temp.txt";
        string path4 = "c:^*&)(_=@#'\\^&#2.*(.txt";
        string path5 = "";
        string path6 = null;

        CombinePaths(path1, path2);
        CombinePaths(path1, path3);
        CombinePaths(path3, path2);
        CombinePaths(path4, path2);
        CombinePaths(path5, path2);
        CombinePaths(path6, path2);
    }

    private static void CombinePaths(string p1, string p2) {

        try {
            string combination = Path.Combine(p1, p2);

            Console.WriteLine("When you combine '{0}' and '{1}', the result is: {2}'{3}'",
                        p1, p2, Environment.NewLine, combination);
        } catch (Exception e) {
            if (p1 == null)
                p1 = "null";
            if (p2 == null)
                p2 = "null";
            Console.WriteLine("You cannot combine '{0}' and '{1}' because: {2}{3}",
                        p1, p2, Environment.NewLine, e.Message);
        }

        Console.WriteLine();
    }
}
// This code produces output similar to the following:
//
// When you combine 'c:\temp' and 'subdir\file.txt', the result is:
// 'c:\temp\subdir\file.txt'
//
// When you combine 'c:\temp' and 'c:\temp.txt', the result is:
// 'c:\temp.txt'
//
// When you combine 'c:\temp.txt' and 'subdir\file.txt', the result is:
// 'c:\temp.txt\subdir\file.txt'
//
// When you combine 'c:^*&)(_=@#'\^&#2.*(.txt' and 'subdir\file.txt', the result is:
// 'c:^*&)(_=@#'\^&#2.*(.txt\subdir\file.txt'
//
// When you combine '' and 'subdir\file.txt', the result is:
// 'subdir\file.txt'
//
// You cannot combine 'null' and 'subdir\file.txt' because:
// Value cannot be null.
// Parameter name: path1
Imports System.IO

Public Class ChangeExtensionTest
    
    
    Public Shared Sub Main()
        Dim path1 As String = "c:\temp"
        Dim path2 As String = "subdir\file.txt"
        Dim path3 As String = "c:\temp.txt"
        Dim path4 As String = "c:^*&)(_=@#'\\^&#2.*(.txt"
        Dim path5 As String = ""
        Dim path6 As String = Nothing

        CombinePaths(path1, path2)
        CombinePaths(path1, path3)
        CombinePaths(path3, path2)
        CombinePaths(path4, path2)
        CombinePaths(path5, path2)
        CombinePaths(path6, path2)
    End Sub

    Private Shared Sub CombinePaths(p1 As String, p2 As String)
        
        Try
            Dim combination As String = Path.Combine(p1, p2)
            
            Console.WriteLine("When you combine '{0}' and '{1}', the result is: {2}'{3}'", p1, p2, Environment.NewLine, combination)
        Catch e As Exception
            If p1 = Nothing Then
                p1 = "Nothing"
            End If
            If p2 = Nothing Then
                p2 = "Nothing"
            End If
            Console.WriteLine("You cannot combine '{0}' and '{1}' because: {2}{3}", p1, p2, Environment.NewLine, e.Message)
        End Try
        
        Console.WriteLine()
    End Sub
End Class
' This code produces output similar to the following:
'
' When you combine 'c:\temp' and 'subdir\file.txt', the result is: 
' 'c:\temp\subdir\file.txt'
' 
' When you combine 'c:\temp' and 'c:\temp.txt', the result is: 
' 'c:\temp.txt'
' 
' When you combine 'c:\temp.txt' and 'subdir\file.txt', the result is: 
' 'c:\temp.txt\subdir\file.txt'
' 
' When you combine 'c:^*&)(_=@#'\^&#2.*(.txt' and 'subdir\file.txt', the result is: 
' 'c:^*&)(_=@#'\^&#2.*(.txt\subdir\file.txt'
' 
' When you combine '' and 'subdir\file.txt', the result is: 
' 'subdir\file.txt'
' 
' You cannot combine '' and 'subdir\file.txt' because: 
' Value cannot be null.
' Parameter name: path1

Комментарии

Если path1 не является ссылкой на диск (то есть "C:" или "D:") и не заканчивается допустимым символом разделителя, как определено в DirectorySeparatorChar, AltDirectorySeparatorCharили VolumeSeparatorChar, DirectorySeparatorChar добавляется к path1 до объединения. Обратите внимание, что если path1 заканчивается символом разделителя пути, который не подходит для целевой платформы, Combine метод сохраняет исходный символ разделителя пути и добавляет поддерживаемый. В следующем примере сравнивается результат в системах Windows и Unix, когда обратная косая черта используется в качестве символа разделителя пути.

var result = Path.Combine(@"C:\Pictures\", "Saved Pictures"); 
Console.WriteLine(result);
// The example displays the following output if run on a Windows system:
//    C:\Pictures\Saved Pictures
//
// The example displays the following output if run on a Unix-based system:
//    C:\Pictures\/Saved Pictures
Dim result = Path.Combine("C:\Pictures\", "Saved Pictures") 
Console.WriteLine(result)
' The example displays the following output if run on a Windows system:
'    C:\Pictures\Saved Pictures
'
' The example displays the following output if run on a Unix-based system:
'    C:\Pictures\/Saved Pictures

Если path2 не содержит корень (например, если path2 не начинается с символа-разделителя или спецификации диска), результатом будет объединение двух путей с промежуточным символом разделителя. Если path2 содержит корень, path2 возвращается .

Параметры не анализируются, если они имеют пробелы. Таким образом, если path2 содержит пробелы (например, "\file.txt "), Combine метод добавляет path2 к path1 , а не возвращает только path2.

платформа .NET Framework и .NET Core более ранних версий, чем 2.1. Не все недопустимые символы для имен каталогов и файлов интерпретируются методом Combine как неприемлемые, так как эти символы можно использовать для поиска подстановочных знаков. Например, если Path.Combine("c:\\", "*.txt") вы хотите создать файл из него, он может быть недопустимым, но он является допустимым в качестве строки поиска. Поэтому он успешно интерпретируется методом Combine .

Список распространенных задач ввода-вывода см. в разделе Общие задачи ввода-вывода.

См. также раздел

Применяется к

Combine(String, String, String)

Объединяет три строки в путь.

public:
 static System::String ^ Combine(System::String ^ path1, System::String ^ path2, System::String ^ path3);
public static string Combine (string path1, string path2, string path3);
static member Combine : string * string * string -> string
Public Shared Function Combine (path1 As String, path2 As String, path3 As String) As String

Параметры

path1
String

Первый путь для объединения.

path2
String

Второй путь для объединения.

path3
String

Третий путь для объединения.

Возвращаемое значение

String

Объединенные пути.

Исключения

платформа .NET Framework и .NET Core версий старше 2.1: path1, path2или path3 содержит один или несколько недопустимых символов, определенных в GetInvalidPathChars().

Значение параметра path1, path2 или path3 равно null.

Примеры

В следующем примере объединяются три пути.

string p1 = @"d:\archives\";
string p2 = "media";
string p3 = "images";
string combined = Path.Combine(p1, p2, p3);
Console.WriteLine(combined);
Dim p1 As String = "d:\archives\"
Dim p2 As String = "media"
Dim p3 As String = "images"
Dim combined As String = Path.Combine(p1, p2, p3)
Console.WriteLine(combined)

Комментарии

path1 должен быть абсолютным путем (например, "d:\archives" или "\\archives\public"). Если path2 или path3 также является абсолютным путем, операция объединения отменяет все ранее объединенные пути и сбрасывает этот абсолютный путь.

Строки нулевой длины опущены в объединенном пути.

Если path1 или path2 не является ссылкой на диск (то есть "C:" или "D:") и не заканчивается допустимым символом разделителя, как определено в DirectorySeparatorChar, AltDirectorySeparatorCharили VolumeSeparatorChar, DirectorySeparatorChar добавляется к path1 или path2 до объединения. Обратите внимание, что если path1 или path2 заканчивается символом разделителя пути, который не подходит для целевой платформы, Combine метод сохраняет исходный символ разделителя пути и добавляет поддерживаемый. В следующем примере сравнивается результат в системах Windows и Unix, когда обратная косая черта используется в качестве символа разделителя пути.

var result = Path.Combine(@"C:\Pictures\", @"Saved Pictures\", "2019"); 
Console.WriteLine(result);
// The example displays the following output if run on a Windows system:
//    C:\Pictures\Saved Pictures\2019
//
// The example displays the following output if run on a Unix-based system:
//    C:\Pictures\/Saved Pictures\/2019
Dim result = Path.Combine("C:\Pictures\", "Saved Pictures\", "2019") 
Console.WriteLine(result)
' The example displays the following output if run on a Windows system:
'    C:\Pictures\Saved Pictures\2019
'
' The example displays the following output if run on a Unix-based system:
'    C:\Pictures\/Saved Pictures\/2019

Если path2 не содержит корень (например, если path2 не начинается с символа-разделителя или спецификации диска), результатом будет объединение двух путей с промежуточным символом разделителя. Если path2 содержит корень, path2 возвращается .

Параметры не анализируются, если они имеют пробелы. Таким образом, если path2 содержит пробелы (например, "\file.txt "), Combine метод добавляет path2 к path1.

платформа .NET Framework и .NET Core более ранних версий, чем 2.1. Не все недопустимые символы для имен каталогов и файлов интерпретируются методом Combine как неприемлемые, так как эти символы можно использовать для поиска подстановочных знаков. Например, если Path.Combine("c:\\", "*.txt") вы хотите создать файл из него, он может быть недопустимым, но он является допустимым в качестве строки поиска. Поэтому он успешно интерпретируется методом Combine .

См. также раздел

Применяется к

Combine(String, String, String, String)

Объединяет четыре строки в путь.

public:
 static System::String ^ Combine(System::String ^ path1, System::String ^ path2, System::String ^ path3, System::String ^ path4);
public static string Combine (string path1, string path2, string path3, string path4);
static member Combine : string * string * string * string -> string
Public Shared Function Combine (path1 As String, path2 As String, path3 As String, path4 As String) As String

Параметры

path1
String

Первый путь для объединения.

path2
String

Второй путь для объединения.

path3
String

Третий путь для объединения.

path4
String

Четвертый путь для объединения.

Возвращаемое значение

String

Объединенные пути.

Исключения

платформа .NET Framework и .NET Core версий старше 2.1: path1, path2, path3или path4 содержит один или несколько недопустимых символов, определенных в GetInvalidPathChars().

Параметр path1, path2, path3 или path4 имеет значение null.

Примеры

В следующем примере объединяются четыре пути.

string path1 = @"d:\archives\";
string path2 = "2001";
string path3 = "media";
string path4 = "images";
string combinedPath = Path.Combine(path1, path2, path3, path4);
Console.WriteLine(combinedPath);
Dim path1 As String = "d:\archives\"
Dim path2 As String = "2001"
Dim path3 As String = "media"
Dim path4 As String = "imaged"
Dim combinedPath As String = Path.Combine(path1, path2, path3, path4)
Console.WriteLine(combined)

Комментарии

path1 должен быть абсолютным путем (например, "d:\archives" или "\\archives\public"). Если один из последующих путей также является абсолютным путем, операция объединения отменяет все ранее объединенные пути и сбрасывает этот абсолютный путь.

Строки нулевой длины опущены в объединенном пути.

Если path1, path2или path3 не является ссылкой на диск (то есть "C:" или "D:") и не заканчивается допустимым символом разделителя, как определено в DirectorySeparatorChar, AltDirectorySeparatorCharили VolumeSeparatorChar, DirectorySeparatorChar добавляется к нему перед объединением. Обратите внимание, что если path1, path2или path3 заканчивается символом разделителя пути, который не подходит для целевой платформы, Combine метод сохраняет исходный символ разделителя пути и добавляет поддерживаемый. В следующем примере сравнивается результат в системах Windows и Unix, когда обратная косая черта используется в качестве символа разделителя пути.

var result = Path.Combine(@"C:\Pictures\", @"Saved Pictures\", @"2019\", @"Jan\"); 
Console.WriteLine(result);
// The example displays the following output if run on a Windows system:
//    C:\Pictures\Saved Pictures\2019\Jan\
//
// The example displays the following output if run on a Unix-based system:
//    C:\Pictures\Saved Pictures\2019\Jan\
Dim result = Path.Combine("C:\Pictures\", "Saved Pictures\", "2019\", "Jan\") 
Console.WriteLine(result)
' The example displays the following output if run on a Windows system:
'    C:\Pictures\Saved Pictures\2019\Jan\
'
' The example displays the following output if run on a Unix-based system:
'    C:\Pictures\Saved Pictures\2019\Jan\

Если path2 не содержит корень (например, если path2 не начинается с символа-разделителя или спецификации диска), результатом будет объединение двух путей с промежуточным символом разделителя. Если path2 содержит корень, path2 возвращается .

Параметры не анализируются, если они имеют пробелы. Таким образом, если path2 содержит пробелы (например, "\file.txt "), Combine метод добавляет path2 к path1.

платформа .NET Framework и .NET Core более ранних версий, чем 2.1. Не все недопустимые символы для имен каталогов и файлов интерпретируются методом Combine как неприемлемые, так как эти символы можно использовать для поиска подстановочных знаков. Например, если Path.Combine("c:\\", "*.txt") вы хотите создать файл из него, он может быть недопустимым, но он является допустимым в качестве строки поиска. Поэтому он успешно интерпретируется методом Combine .

См. также раздел

Применяется к