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
こいつを実行すると、フォルダ内が
こうなる。
一見すると、「ち~んw
」という名前のフォルダが出来ただけのようである。
しかし……。
ファッ?!
なんと、
こんなふうになってしまうのである!
一見、全く同名のフォルダが出来たようであるが、
おわかりだろうか。
下の方は、「w
」の後ろがちょっと長い。
下の方は、「ち~んw
」の後ろに半角スペースが入っているのである。
普通、こんな名前のフォルダは作れないが、どうもFileSystemObject
を使うと、こういうわけのわからないフォルダが作れてしまうようなのである。
恐ろしいこと
単に、〝ちょっと普通には作れないフォルダが作れちゃう〟というだけなら、何ら実害はない。
しかし、恐ろしいことに、こうして出来た変なフォルダ(今回の場合だと「ち~んw
」フォルダ。)は、次のような事態を招くのである!
け、消せねえ……。
めっちゃ困るのである!
救いの手がさしのべられた
どうしてもフォルダが消せず、困っていたところ、踊る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
これで、無事に消えてくれました。
ありがとう、踊るさん!
おわりに
さすがや……。