ルートディレクトリからのパスかどうかによって動作が変わるCombineメソッドとは異なり、Joinメソッドはパスの階層構造の解釈は行わず、単にパスの断片として結合を行います。 必要に応じてディレクトリ区切り文字が自動的に補われる点はCombineメソッドと同様です。
Joinメソッドでは結合された結果がパスとして正しい形式になるとは限らないため、常に正しい形式のパスとして結合したい場合はCombineメソッドを使用します。
Path.Joinメソッドでパスの断片を結合する
using System;
using System.IO;
class Sample {
static void Main()
{
// Path.Joinメソッドでパスの断片を結合する (比較として、Path.Combineメソッドでの結合も行う)
// Windows形式のパス
Console.WriteLine("Join: {0}", Path.Join (@"E:\", @"\dir", "file.txt")); // それぞれ単にパスの一部として結合される
Console.WriteLine("Combine: {0}", Path.Combine(@"E:\", @"\dir", "file.txt")); // "\dir"からのパスとして結合される
Console.WriteLine();
Console.WriteLine("Join: {0}", Path.Join (@"E:\", @"\dir", @"\subdir\", "file.txt")); // それぞれ単にパスの一部として結合される
Console.WriteLine("Combine: {0}", Path.Combine(@"E:\", @"\dir", @"\subdir\", "file.txt")); // "\subdir"からのパスとして結合される
Console.WriteLine();
Console.WriteLine("Join: {0}", Path.Join ("E:", "C:", "subdir", "file.txt")); // それぞれ単にパスの一部として結合される
Console.WriteLine("Combine: {0}", Path.Combine("E:", "C:", "subdir", "file.txt")); // "C:\"からのパスとして結合される
Console.WriteLine();
// UNIX形式のパス
Console.WriteLine("Join: {0}", Path.Join ("/root", "/dir", "file.txt")); // それぞれ単にパスの一部として結合される
Console.WriteLine("Combine: {0}", Path.Combine("/root", "/dir", "file.txt")); // "/dir"からのパスとして結合される
Console.WriteLine();
Console.WriteLine("Join: {0}", Path.Join ("/root", "/dir", "/subdir/", "file.txt")); // それぞれ単にパスの一部として結合される
Console.WriteLine("Combine: {0}", Path.Combine("/root", "/dir", "/subdir/", "file.txt")); // "/subdir"からのパスとして結合される
Console.WriteLine();
}
}
実行結果
Join: E:\\dir\file.txt Combine: \dir\file.txt Join: E:\\dir\subdir\file.txt Combine: \subdir\file.txt Join: E:\C:\subdir\file.txt Combine: C:\subdir\file.txt Join: /root/dir\file.txt Combine: /dir\file.txt Join: /root/dir/subdir/file.txt Combine: /subdir/file.txt
実行結果
Join: E:\/\dir/file.txt Combine: E:\/\dir/file.txt Join: E:\/\dir/\subdir\/file.txt Combine: E:\/\dir/\subdir\/file.txt Join: E:/C:/subdir/file.txt Combine: E:/C:/subdir/file.txt Join: /root/dir/file.txt Combine: /dir/file.txt Join: /root/dir/subdir/file.txt Combine: /subdir/file.txt