パスとファイルシステムの操作――Rustのファイルとディレクトリの操作を理解する:基本からしっかり学ぶRust入門(16)
Rustについて基本からしっかり学んでいく本連載。第16回は、ファイルやディレクトリのパスの操作、そしてファイルシステムの操作について。
パスの操作
連載第15回では、ファイルの入出力を紹介しました。その際、ファイル名をopen関数などに与えて対象のファイルを指定しましたが、実際にはパスを表すPath構造体のインスタンスが与えられていることに触れました。ここでは、Path構造体とその可変版であるPathBuf構造体を掘り下げて、パス文字列の自由自在の操作を紹介します。
Path構造体とPathBuf構造体とは?
Path構造体とPathBuf構造体は、std::pathモジュールにあります。std::pathモジュールには7個の構造体がありますが、代表的なのはこの2つです。それぞれのおおまかな役割は以下の通りです。
- Path構造体はパスの文字列を保持し、必要に応じてstd::fsモジュールの関数に渡される。さまざまな判定関数、取得関数を持つ。パスは不変で&strと同種
- PathBuf構造体も同様にパスの文字列を保持し、必要に応じてstd::fsモジュールの関数に渡される。判定関数等は持たないが、パスを組み立てたり加工したりする関数を持ち、Stringと同種
Path構造体ではパスは不変となり、参照系の操作しか受け付けませんが、PathBuf構造体ではパスは可変となり、更新系の操作を受け付けます。では、常にPathBuf構造体を使えばいいかというとそうではなく、PathBuf構造体は判定や取得などの関数は持たないので、それらの機能が必要ならPath構造体を使う必要があります。つまり、以下のような使い分けになります。
- パスの更新が不要ならPath構造体を使う
- パスの更新が必要ならPathBuf構造体を使い、必要に応じてPath構造体への参照を取得する
Path構造体の判定関数も、PathBuf構造体の加工関数も、OSのパスの区切り文字などを極力意識しないで操作できるようになっています。文字列操作関数をパスの判定や加工に使うと、どうしても区切り文字などを意識しなければなりませんが、そういった配慮が不要なので極めて容易にパスが操作できるようになっています。
以降、Path構造体を中心にさまざまな判定の例を紹介し、PathBuf構造体を用いたパスの加工についても例を紹介します。
Path構造体のインスタンスの作成
Copyright © ITmedia, Inc. All Rights Reserved.