VC.NET ~ System::IO::Path

前置き

"c:\tmp\foo.txt"のようなパス文字列を処理するコードを書くなら、System::IO::Pathが便利です。

本文

パスを構成する特殊文字の取得

ディレクトリの区切り記号など、パスを構成する特殊文字はOS依存なので、OSに依存しないコードを書きたいときは、下記のpublicフィールドを使いましょう。

Console::WriteLine(Path::DirectorySeparatorChar);  // \
Console::WriteLine(Path::PathSeparator);           // ;
Console::WriteLine(Path::VolumeSeparatorChar);     // :

まぁ、Windows以外のOSをケアしつつCLIのコードを書く人は少ないかもしれませんが。

パスの解析

Console::WriteLine(Path::GetDirectoryName("c:\\tmp\\foo.txt"));  // c:\tmp
Console::WriteLine(Path::GetDirectoryName("c:\\tmp\\foo\\"));    // c:\tmp\foo
Console::WriteLine(Path::GetDirectoryName("c:\\tmp\\foo"));      // c:\tmp

Console::WriteLine(Path::GetExtension("c:\\tmp\\foo.txt"));      // .txt
Console::WriteLine(Path::GetFileName("c:\\tmp\\foo.txt"));       // foo.txt
Console::WriteLine(Path::GetFileNameWithoutExtension("c:\\tmp\\foo.txt"));
                                                                 // foo

Console::WriteLine(Path::GetPathRoot("c:\\tmp\\foo"));           // c:\

Console::WriteLine(Path::IsPathRooted("c:\\tmp\\foo.txt"));      // True
Console::WriteLine(Path::IsPathRooted("\\tmp\\foo.txt"));        // True
Console::WriteLine(Path::IsPathRooted("..\\foo.txt"));           // False

パスの加工

Console::WriteLine(Path::ChangeExtension("c:\\tmp\\foo.txt", "doc"));
                                                                 // c:\tmp\foo.doc
Console::WriteLine(Path::ChangeExtension("c:\\tmp\\bar.buz.htm", "html"));
                                                                 // c:\tmp\bar.buz.html
Console::WriteLine(Path::Combine("c:\\tmp", "foo.txt"));         // c:\tmp\foo.txt
Console::WriteLine(Path::Combine("c:\\tmp\\", "foo.txt"));       // c:\tmp\foo.txt

System::IO::Directory::SetCurrentDirectory("c:\\windows");
Console::WriteLine(Path::GetFullPath("..\\tmp\\foo.txt"));       // c:\tmp\foo.txt

Console::WriteLine(Path::GetRandomFileName());                   // o2qho3kx.nvd
Console::WriteLine(System::Environment::GetEnvironmentVariable("tmp"));
                                                                 // D:\tmp
Console::WriteLine(Path::GetTempFileName());                     // D:\tmp\tmp51.tmp
Console::WriteLine(Path::GetTempPath());                         // D:\tmp\

GetFullPath()は、カレントディレクトリに依存します。GetRandomFileName()は、文字通りランダム。またGetTempFileName()とGetTempPath()は、環境変数TMP/TEMPに依存します。TMP優先で、TMPもTEMPも未定義の場合は、カレントユーザのホームディレクトリ(C:\Documents and Settings\USERNAME\)を返すようです。

Last modified:2012/05/11 12:13:50
Keyword(s):
References:[.NETアプリ開発]
This page is frozen.