Path クラス

ファイルまたはディレクトリのパス情報を格納する String インスタンスで操作を実行します。これらの操作は、プラットフォーム間で実行されます。

この型のすべてのメンバの一覧については、Path メンバ を参照してください。

System.Object
   System.IO.Path

NotInheritable Public Class Path
[C#]
public sealed class Path
[C++]
public __gc __sealed class Path
[JScript]
public class Path

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

.NET Framework では、"\\.\PHYSICALDRIVE0" など、デバイス名を指定したパスを使用して物理ディスクに直接アクセスすることはできません。

パスとは、ファイルまたはディレクトリの位置を示す文字列です。パスは、必ずしもディスク上の位置をポイントせず、たとえば、メモリやデバイスの位置を示す場合もあります。パスの正しい書式は、現在のプラットフォームで決定されます。たとえば、システムによっては、パスをドライブ名やボリューム名で始める場合がありますが、この要素は他のシステムには存在しません。また、システムによっては、パスに、ファイルに格納された情報のタイプを示す拡張子を含めることができます。ファイル名の拡張子の書式は、プラットフォームに依存します。たとえば、拡張子を 3 文字に制限しているシステムもありますが、制限しないシステムもあります。現在のプラットフォームは、パスの要素を区切る文字セット、およびパスの指定時に使用できない文字セットも決定します。これらの違いがあるため、 Path クラスのいくつかのメンバの厳密な動作と Path クラスのフィールドは、プラットフォームに依存します。

パスには、絶対位置情報または相対位置情報を含めることができます。絶対パスは、完全な位置を指定します。つまり、ファイルまたはディレクトリは、現在の位置に関係なく一意に識別できます。相対パスは、部分的な位置を指定します。つまり、現在の位置は、相対パスで指定したファイルを検索するときの開始点として使用されます。現在のディレクトリを確認するには、 Directory.GetCurrentDirectory を呼び出します。

Path クラスのほとんどのメンバは、ファイル システムと対話せず、パス文字列で指定したファイルの有無を検査しません。 ChangeExtension などのパス文字列を修正する Path クラス メンバは、ファイル システムのファイル名には影響を与えません。ただし、 Path メンバは、指定したパス文字列の内容を検証し、文字列に、 InvalidPathChars で定義されるパス文字列で無効な文字が含まれている場合は、 ArgumentException をスローします。たとえば、Windows ベースのデスクトップ プラットフォームでは、引用符 (")、不等号 (より小) (<)、不等号 (より大) (>)、パイプ (|)、バックスペース (\b)、null (\0)、Unicode 文字の 16 ~ 18 および 20 ~ 25 が無効なパス文字です。

Path クラスのメンバを使用すると、ファイル名の拡張子がパスの一部かどうかの判断や、2 つの文字列を 1 つのパス名に結合するなどの一般的な操作をすばやく、簡単に実行できます。

Path クラスのすべてのメンバは静的であるため、パスのインスタンスを持たなくても呼び出すことができます。

メモ   入力文字列としてパスを受け入れるメンバでは、そのパスが正しい書式である必要があります。それ以外の場合は、例外が発生します。たとえば、パスが絶対パスであっても空白で始まっている場合、そのパスはクラスのメソッドではトリムされません。このため、パスが正しい書式にならず、例外が発生します。同様に、1 つのパスまたは複数のパスの組み合わせを絶対パスとして 2 度指定することはできません。たとえば、"c:\temp c:\windows" でも、ほとんどの場合において例外が発生します。パス文字列を受け入れるメソッドを使用するときは、パスが適切な書式であることを確認します。

パスを受け入れるメンバでは、ファイルまたはディレクトリを参照するパスを指定できます。指定するパスは、相対パス、またはサーバーおよび共有名を示す UNC (Universal Naming Convention) パスにすることができます。たとえば、次に示すパスはすべて有効なパスです。

  • C# では "c:\\MyDir\\MyFile.txt"、Visual Basic では "c:\MyDir\MyFile.txt"。
  • C# では "c:\\MyDir"、Visual Basic では "c:\MyDir"。
  • C# では "MyDir\\MySubdir"、Visual Basic では "MyDir\MySubDir"。
  • C# では "\\\\MyServer\\MyShare"、Visual Basic では "\\MyServer\MyShare"。

これらの操作はすべて文字列で実行されるため、実行結果がすべてのシナリオで有効かどうかを確認できません。たとえば、 GetExtension メソッドは、それに渡す文字列を解析し、その文字列から拡張子を返します。ただし、その拡張子を持つファイルがディスク上に存在するとは限りません。

このクラスの使用例については、以下の「使用例」を参照してください。その他の一般的な I/O タスクまたは関連する I/O タスクの例を次の表に示します。

実行するタスク 参考例があるトピック
テキスト ファイルを作成する。 ファイルへのテキストの書き込み
テキスト ファイルに書き込む。 ファイルへのテキストの書き込み
テキスト ファイルから読み取る。 ファイルからのテキストの読み取り
ファイルの拡張子を取得する。 GetExtension
ファイルの絶対パスを取得する。 GetFullPath
パスからファイル名と拡張子を取得する。 GetFileName
パスからファイル名だけを取得する。 GetFileNameWithoutExtension
パスからディレクトリ名だけを取得する。 GetDirectoryName
ファイルの拡張子を変更する。 ChangeExtension
ディレクトリが存在するかどうかを判別する。 Exists
ファイルが存在するかどうかを判別する。 Exists

使用例

[Visual Basic, C#, C++] Path クラスの主要なメンバの例を次に示します。

 
Imports System
Imports System.IO

Public Class Test

    Public Shared Sub Main()
        Dim path1 As String = "c:\temp\MyTest.txt"
        Dim path2 As String = "c:\temp\MyTest"
        Dim path3 As String = "temp"

        If Path.HasExtension(path1) Then
            Console.WriteLine("{0} has an extension.", path1)
        End If

        If Path.HasExtension(path2) = False Then
            Console.WriteLine("{0} has no extension.", path2)
        End If

        If Path.IsPathRooted(path3) = False Then
            Console.WriteLine("The string {0} contains no root information.", path3)
        End If

        Console.WriteLine("The full path of {0} is {1}.", path3, Path.GetFullPath(path3))
        Console.WriteLine("{0} is the location for temporary files.", Path.GetTempPath())
        Console.WriteLine("{0} is a file available for use.", Path.GetTempFileName())

        Console.WriteLine(Environment.NewLine & _
          "The set of invalid characters in a path is:")
        Console.WriteLine("(Note that the wild card characters '*' and '?' are not invalid.):")

        Dim c As Char
        For Each c In Path.InvalidPathChars
            Console.WriteLine(c)
        Next
    End Sub
End Class

[C#] 
using System;
using System.IO;

class Test 
{
    
    public static void Main() 
    {
        string path1 = @"c:\temp\MyTest.txt";
        string path2 = @"c:\temp\MyTest";
        string path3 = @"temp";

        if (Path.HasExtension(path1)) 
        {
            Console.WriteLine("{0} has an extension.", path1);
        }

        if (!Path.HasExtension(path2)) 
        {
            Console.WriteLine("{0} has no extension.", path2);
        }

        if (!Path.IsPathRooted(path3)) 
        {
            Console.WriteLine("The string {0} contains no root information.", path3);
        }

        Console.WriteLine("The full path of {0} is {1}.", path3, Path.GetFullPath(path3));
        Console.WriteLine("{0} is the location for temporary files.", Path.GetTempPath());
        Console.WriteLine("{0} is a file available for use.", Path.GetTempFileName());

        Console.WriteLine("\r\nThe set of invalid characters in a path is:");
        Console.WriteLine("(Note that the wildcard characters '*' and '?' are not invalid.):");
        foreach (char c in Path.InvalidPathChars) 
        {
            Console.WriteLine(c);
        }
    }
}

[C++] 
#using <mscorlib.dll>

using namespace System;
using namespace System::IO;

int main() {
    String* path1 = S"c:\\temp\\MyTest.txt";
    String* path2 = S"c:\\temp\\MyTest";
    String* path3 = S"temp";

    if (Path::HasExtension(path1)) {
        Console::WriteLine(S"{0} has an extension.", path1);
    }

    if (!Path::HasExtension(path2)) {
        Console::WriteLine(S"{0} has no extension.", path2);
    }

    if (!Path::IsPathRooted(path3)) {
        Console::WriteLine(S"The string {0} contains no root information.", path3);
    }

    Console::WriteLine(S"The full path of {0} is {1}.", path3, Path::GetFullPath(path3));
    Console::WriteLine(S"{0} is the location for temporary files.", Path::GetTempPath());
    Console::WriteLine(S"{0} is a file available for use.", Path::GetTempFileName());

    Console::WriteLine(S"\r\nThe set of invalid characters in a path is:");
    Console::WriteLine(S"(Note that the wildcard characters '*' and '?' are not invalid.):");
    Collections::IEnumerator* myEnum = Path::InvalidPathChars->GetEnumerator();
    while (myEnum->MoveNext()) {
        Char c = *__try_cast<__box Char*>(myEnum->Current);
        Console::WriteLine(c);
    }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.IO

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

Path メンバ | System.IO 名前空間 | 入出力操作 | ファイルからのテキストの読み取り | ファイルへのテキストの書き込み | 基本のファイル I/O | 新しく作成したデータ ファイルの読み取りと書き込み