FileSystemObjectのCreateFolderメソッドで半角スペースで終わるフォルダ名のフォルダを作ったらヤバい

FileSystemObjectでフォルダを作るときに気をつけた方がいいこと

ちょっと恐怖体験をしたので報告。

フォルダ名の最後の文字が半角スペースになるようなフォルダを作る

Scripting.FileSystemObjectオブジェクトの、CreateFolderメソッドを使ってフォルダを作るときに、フォルダ名の末尾を半角スペースにしてみる。

リスト1
'Microsoft Scripting Runtime 参照設定済み'
Private Sub test00()
  Dim fsObj As New Scripting.FileSystemObject
  Call fsObj.CreateFolder(ThisWorkbook.Path & "\ち~んw ")
End Sub

こいつを実行すると、フォルダ内が

f:id:akashi_keirin:20210607202817p:plain

こうなる。

一見すると、「ち~んw」という名前のフォルダが出来ただけのようである。

しかし……。

f:id:akashi_keirin:20210607202832g:plain

ファッ?!

なんと、

f:id:akashi_keirin:20210607202820p:plain

こんなふうになってしまうのである!

一見、全く同名のフォルダが出来たようであるが、

f:id:akashi_keirin:20210607202823p:plain

f:id:akashi_keirin:20210607202826p:plain

おわかりだろうか。

下の方は、「」の後ろがちょっと長い。

下の方は、「ち~んw」の後ろに半角スペースが入っているのである。

普通、こんな名前のフォルダは作れないが、どうもFileSystemObjectを使うと、こういうわけのわからないフォルダが作れてしまうようなのである。

恐ろしいこと

単に、〝ちょっと普通には作れないフォルダが作れちゃう〟というだけなら、何ら実害はない。

しかし、恐ろしいことに、こうして出来た変なフォルダ(今回の場合だと「ち~んw 」フォルダ。)は、次のような事態を招くのである!

f:id:akashi_keirin:20210607202835g:plain

け、消せねえ……。

めっちゃ困るのである!

救いの手がさしのべられた

どうしてもフォルダが消せず、困っていたところ、踊るVBEの中の人が救いの手をさしのべてくださった。

曰く、

WinAPI使ったら消せるよ!

と。

ありがたや~!

踊る氏に、教えてもらったWinAPI関数が、コチラ。

Private Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long

こいつを宣言セクションに書いて、次のコードで実行してみた。

スト2
Private Sub test01()
  Call RemoveDirectory(ThisWorkbook.Path & "\ち~んw \")
End Sub

これで、無事に消えてくれました。

ありがとう、踊るさん!

おわりに

さすがや……。