ディレクトリ・ファイル操作の新旧方式

C++Bulider(RadStudio)のディレクトリやファイル操作に関しては、昔ながらのSystem.SysUtils配下の方法と、新しいSystem.IOUtils配下の方法がある。
まったく同一ではないが、基本的な操作は、どちらも似たようなことが出来る。

どちらでもいいといえば良いのだが、クロスプラットフォームを前提に開発するなら、新しいIOUtils配下にしかない関数群を使った方が便利なことが多いと思う。

どうせなら、Windows単体の開発でも、ふだんから新方式を使って慣れておいた方がいいというのが個人的な考え。

主な操作のそれぞれのやり方をまとめてみた。
(引数のpathはフルパスのディレクトリ名またはファイル名)

以下、VclとFiremonkey共通。

使い方
Includeファイル名
SysUtils System.SysUtils.hpp
IOUtils System.IOUtils.hpp
ファイル名からドライブ・ディレクトリ部分を得る
SysUtils ExtractFileDir( path )
IOUtils TPath::GetDirectoryName( path )
ディレクトリ名とファイル名からフルパスのファイル名を作る
SysUtils IncludeTrailingPathDelimiter( path )+filename
IOUtils TPath::Combine(path,filename)
ディレクトリの存在確認
SysUtils DirectoryExists(path)
IOUtils TDirectory::Exists(path)
ファイルの存在有無
SysUtils FileExists(path)
IOUtils TFile::Exists(path)
ディレクトリの作成
SysUtils CreateDir(path)
IOUtils TDirectory::CreateDirectory(path)
空のディレクトリを削除
SysUtils RemoveDir(path)
IOUtils TDirectory::Delete(path)
ディレクトリを中身ごと削除
SysUtils (自前で実装の必要あり)
IOUtils TDirectory::Delete(path,true)
ファイルを削除
SysUtils DeleteFile(path)
IOUtils TFile::Delete(path)

C++Builder Berlin Update2 / Windows7で確認。

TRectの便利関数

どのバージョンからか把握していないが、TRectにはいろいろな関数(やコンストラクタ)が実装されている。
Vclの一昔前のサンプルだと、こうした関数を使わない(ちょっと面倒くさい)処理が紹介されていたりする。
というか自分自身も昔の名残で、ついだらだらとコードを書きがちだったり。

Helpの一覧だと、実装が書いてあるだけで(RadStudio10.2 Tokypリリース直後時点)、まあ読めば分かるといえばそうなのだが、忘れがちなので一覧にしてみた。

System配下なので、Vcl・FireMonkey共通。(Delphiでも同じように使えるはず。)
以下、RはTRect、PtはTPointの変数。

動作 実例
PointからRectを作成 R = TRect(Pt1,Pt2)
Rectの値を正しくする R.Normalize()
位置をずらす R.Offset(X,Y)
R.Offset(Pt)
Rectの始点を指定する R.SetLocation(X,Y)
R.SetLocation(Pt)
Rectの始点を得る Pt = R.GetLocation()
Rectに点が含まれるか bool b = R.Intersects(Pt)
他のRectと重なっているか bool b = R1.Overlaps(R2)
他のRectを完全に含むか bool b = R1.Contains(R2)
全方向に大きく(小さく)する R.Inflate(X,Y)
R.Inflate(l,t,r,b)
中心点を得る Pt = R.CenterPoint()

FireMonkeyのイベント等で使われるTRectF/TPointFでもおおむね同様の関数が使える。(一部名前が違ったりするようだが、精査していない)