existfileで、第1引数の末尾が\で終わってNo.04247
たけとり さん 09/10/17 18:39
 
たびたびすみません。

 existfileですが、C:\dir\test.txtというファイルが実在するときに、末尾がバッ
クスラッシュで終わっていたら、フォルダじゃないと見なされます。

 たとえば、
 existfile("C:\\dir", 1) & 0x10
は真ですが、
 existfile("C:\\dir\\", 1) & 0x10
は偽になります。
 厳密に言うと、第2引数を省略した existfile("C:\\dir\\") も偽です。

 私の感覚的に、末尾がバックスラッシュで終わっているときも、フォルダと見なさ
れるのではないのかなと思っています。
 バージョン8では
#objFSO = createobject("Scripting.FileSystemObject");
callmethod_returnnum(#objFSO, "FolderExists", "C:\\dir\\");
という手段も使えるのですが、existfileでもフォルダと見なされるようにしていた
だけるとうれしいです。

よろしくご検討をお願いします。

[ ]
RE:04247 existfileで、第1引数の末尾が\No.04254
秀丸担当 さん 09/10/19 10:21
 

> existfileですが、C:\dir\test.txtというファイルが実在するときに、末尾がバッ
>クスラッシュで終わっていたら、フォルダじゃないと見なされます。

existfileは単純にWindowsAPIのFindFirstFileを使っていて、FindFirstFileは末
尾の\はだめなようです。
COMでもきると思いますが、マクロ上で末尾の\を除去してからexistfileを呼ぶだ
けで回避できるのではないかと思います。
秀丸エディタ本体側で除去してもいいといえばいいのですが、こういった基本的
なところで下位互換性が無いマクロができてしまうのもどうかと思うので、仕様
ということでお願いします。

[ ]
RE:04254 existfileで、第1引数の末尾が\No.04255
たけとり さん 09/10/19 10:32
 
投稿を拝見してちょっと考えたのですが、確かに、
existfile(leftstr($str, strlen($str) - (rightstr($str, 1) == "\\")), 0x10)
みないので簡単にできてしまいました。
失礼しました。

>下位互換性が無いマクロができてしまうのもどうかと思うので、仕様
>ということでお願いします。

了解しました。

[ ]