4.[ライブラリ]Pathクラス

最近忙しくて少々遅れ気味ですが、ActiveBasic5.0CP4新機能,ライブラリ紹介の第四弾です。今回は小難しい話は置いといて、とりあえず即使えるPathクラスを紹介します。本当はEnvironmentクラスあたりを紹介しようと思っていたのですが、こちらは私自身まだ使ったこと無いので、保留ということにしておきます。

A.概要

Pathクラスは、System.IO名前空間のクラスで、パスを示す文字列について、さまざまな機能を提供しています。パスはファイルパスのことです。ちなみに、Pathクラスは私が実装したのですが、とりあえず動くレベルで、割と適当に作ってありますので、Windowsファイルパス以外のパスについての動作は保証していません。また、今後もう少し複雑なパスや、無効なパスが引数に指定されたときの動作なども実装したいので、一度作り直す予定です。作り直すからといって、動作を変更する訳ではないので、今使っても問題はないと思います。

名前空間についてですが、CP4時点のライブラリでは、System.IOは名前空間が適応されていません。また、デフォルトの状態では、Pathクラスはイングルードされてませんので、コードの先頭に”#require <Classes/System/IO/Path.ab>”と、記述する必要があります。この辺は開発者メンバーの対応が悪かったとしかいいようが無く、申し訳ないところで、現時点ではイングルードして使用するPathクラスですが、おそらく次のバージョンで宣言がこれと代わり、先頭に”Imports System.IO”の宣言をするようになるかと思われます。

B.機能紹介

Pathクラスは、パス文字列を操作する、便利な静的メソッドの集まりです。従って、Path.という名前で始まる便利な関数郡と捉えていいでしょう。

1.GetFileName

GetFileNameメソッドで、パス文字列からファイル名を取り出すことができます。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.GetFileName(path), "ファイル名", MB_OK)
2.GetFileNameWithoutExtension

GetFileNameWithoutExtensionメソッドで、パス文字列から、拡張子を除いたファイル名を取得することができます。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.GetFileNameWithoutExtension(path), "ファイル名(拡張子なし)", MB_OK)
3.GetExtension

GetExtensionメソッドで、パス文字列から拡張子の部分だけを取得することができます。拡張子の”.”も含んで取得されますので、先頭の文字列は必ず”.”から始まることになります。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.GetExtension(path), "拡張子", MB_OK)
4.ChangeExtension

ChangeExtensionメソッドで、指定した拡張子に変更したパス文字列を作成することができます。1つ目の引数には、拡張子を変更したパス文字列を指定し、2つ目の引数には、変更したい拡張子を指定します。注意点として、拡張子は先頭の”.”を含む形で指定してください。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.ChangeExtension(path, ".abp"), "拡張子変更", MB_OK)
5.HasExtension

HasExtensionメソッドで、パス文字列に拡張子が含まれているか、を調べることができます。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
If Path.HasExtension(path) Then
	MessageBox(0, "拡張子が含まれる", "確認", MB_OK)
Else
	MessageBox(0, "拡張子が含まれない", "確認", MB_OK)
End If
6.GetTempPath
7.GetFullPath

本当は、この2つも紹介するつもりでしたが、名前空間への対応が済んでいないためうまく動作しないのと、なぜかコンパイラが落ちるので、今回は見送ります。

8.GetDirectoryName

GetDirectoryNameメソッドで、指定したパス文字列が示すファイルの、親ディレクトリを取得します。簡単言うと、どのフォルダにファイルが入っているのかを取得します。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.GetDirectoryName(path), "ディレクトリ名", MB_OK)
9.GetPathRoot

GetPathRootメソッドで、パス文字列のルートディレクトリを取得します。Windowsの絶対パスを指定した場合は、大抵の場合、”C:¥”などのドライブ名が返ってきます。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.GetPathRoot(path), "ルートディレクトリ", MB_OK)
10.IsPathRooted

IsPathRootedメソッドで、指定したパス文字列に、ルートディレクトリが含まれるか、を調べます。

#require <Classes/System/IO/Path.ab>
Dim path = "C:¥Windows¥ActiveBasic¥notitle.ab" As String
If Path.IsPathRooted(path) Then
	MessageBox(0, "ルートディレクトリが含まれる", "確認", MB_OK)
Else
	MessageBox(0, "ルートディレクトリが含まれない", "確認", MB_OK)
End If
11.Combine

Combineメソッドは、二つのパスを結合して、ひとつのパスにします。具体的には、”C:¥Windows”というパスと、”ActiveBasic¥notitle.ab”を結合すると、”C:¥Windows¥ActiveBasic¥notitle.ab”というパス文字列になります。結合されるパス文字列(C:¥Windowsの方)には、パスの終端にディレクトリ区切り記号の”¥”が、あってもなくても正しいパスを取得することができます。

#require <Classes/System/IO/Path.ab>
Dim path1 = "C:¥Windows" As String
Dim path2 = "ActiveBasic¥notitle.ab" As String
MessageBox(0, Path.Combine(path1, path2), "結合", MB_OK)

C.補足

Pathクラスは、あくまでもパスも文字列に対して操作を行うものなので、実際にファイルが存在するのか、といったこととは全く関係がありません。これらのメソッドは、全て与えられたパス文字列を元に実行されます。


今日はこんなところで終わりです。開発者フォーラムの方では一度言った気がしますが、今年はある事情により、私はほとんどライブラリのコーディング作業を支援することはできそうにありません。ただでさ4人くらいしかコミットする人がいないので、開発速度に影響が出てしまうかもしれませんが、どうかご理解いただきたいです。

コメント投稿