フォルダを削除する際に使用する、
RmDirステートメントと、FileSystemObject.DeleteFolderメソッドの違いを解説します。
※ FileSystemObjectは以下FSOと略記します。
同じところ
実はこの2つはほとんど違うものです。
違うところ
RmDirステートメントは正確には「空のフォルダを削除する」ステートメントです。
フォルダの中にファイルやサブフォルダが1つでもあると、
RmDirステートメントはエラーになります。
対してFSO.DeleteFolderメソッドは、
「中身のファイル/サブフォルダごとフォルダを削除する」メソッドです。
多くの人がイメージする「フォルダを削除する」は、
こちらなのではないかと思います。
また「ワイルドカード*」を使って複数のフォルダを削除するのも、
DeleteFolderは出来ますがRmDirにはできません。
ということで、まったく違うものと言っていいくらいですね。
Dir系列とFSOは対応している機能が多く、例えば
- フォルダを作成する「MkDirとFSO.CreateFolder」
- ファイルを削除する「KillとFSO.DeleteFile」
などは、処理内容はもちろんのこと、エラー発生条件までもが一致していて、
ほとんど同じものと言ってもいいくらいです。
このようにそれぞれペアが組める両チームの類似メソッド同士で、
ここまで違う動きになるペアはRmDirとDeleteFolderだけだと思います。
使い分け
「中身のファイル/サブフォルダごとフォルダを削除」したい場合は、
FSO.DeleteFolderメソッドを使用してください。
あまりなさそうですが、「フォルダが空の時だけ削除」したい場合は、
RmDirステートメントを使用してください。
それぞれの実際のソースコードは以下の記事をご覧ください。