bug? existfileNo.06898
ひろ さん 00/11/28 11:58
 
 秀丸担当様今日は、ひろです。
 鶴亀メールで、一般公開している macro を作成していて、その時に解っ
たのですが、Windows2000 の環境で、秀丸で
if(existfile(hidemarudir + "\\<>"))message "何故<>が存在する???";
else message "<>は存在しない";
を実行すると、「何故<>が存在する???」が表示されるそうです。「<>」は
file name に使えないので、どんな環境でもし存在しないはずなんですが...。
 #しまった、相手の秀丸 version を聞き忘れた(^^;。

 Windos98+秀丸 Ver.3.06β では問題ありません。

[ ]
RE:06898 bug? existfileNo.06899
いただきマンモ さん 00/11/28 12:32
 
> 秀丸担当様今日は、ひろです。
> 鶴亀メールで、一般公開している macro を作成していて、その時に解っ
>たのですが、Windows2000 の環境で、秀丸で
>if(existfile(hidemarudir + "\\<>"))message "何故<>が存在する???";
>else message "<>は存在しない";
>を実行すると、「何故<>が存在する???」が表示されるそうです。「<>」は
>file name に使えないので、どんな環境でもし存在しないはずなんですが...。
> #しまった、相手の秀丸 version を聞き忘れた(^^;。
>
> Windos98+秀丸 Ver.3.06β では問題ありません。
秀丸担当さん、ひろさん、いつもお世話になっています。
不具合かなと思ってひろさんにメール出したのですが、一体何なんでしょう。
卓駆☆でファイル名検索で<>を行なってもなにやらいっぱい引っ掛かってきます。
当然、ファイル名に<>なんて文字は入っていません。
エクスプローラだとそんなファイルないよと回答してくれるんですけど。

ちなみに、環境は
Windows2000 5.00 2195
秀丸Ver.3.05
です。

[ ]
RE:06898 bug? existfileNo.06900
Arimac さん 00/11/28 12:49
 
WindowsNT4.0(SP5)+秀丸 Ver.3.05でもファイルを開くの
ファイル名に"<>"を入れると何やら表示されてきます。
(ダイアログはWindows95タイプ)
何となく秀丸に関連付けされているファイルがセレクト
されているような気がします。
NT系の裏技なのかな?(^^;

[ ]
RE:06900 bug? existfileNo.06901
Arimac さん 00/11/28 12:57
 
ファイルの種類は「ユーザー指定」です。

[ ]
RE:06901 bug? existfileNo.06902
Arimac さん 00/11/28 13:00
 
ファイル名に何も入れなくても秀丸に関連付けた
ファイルが出てきました(^^;
秀丸の機能だったようです(^^;;

[ ]
RE:06902 bug? existfileNo.06903
ひろ さん 00/11/28 16:57
 
 Arimacさん今日は、ひろです。
> 秀丸の機能だったようです(^^;;
 色々試して頂いたようで有り難うございます。
 因みに WindowsNT4.0 では、
message str(existfile("<>"));
の結果はなんになるんでしょう?

[ ]
RE:06903 bug? existfileNo.06905
かかし さん 00/11/28 18:40
 
かかしです、こんにちは。

すいません、ごみです。

> Arimacさん今日は、ひろです。
>> 秀丸の機能だったようです(^^;;
> 色々試して頂いたようで有り難うございます。
> 因みに WindowsNT4.0 では、
>message str(existfile("<>"));
>の結果はなんになるんでしょう?

結果だけで言えば、1 でした。
existfileって、ディレクトリも判断してくれるんだなあ
ってちょっと感心しちゃいました。

NT4.0 sp4
秀丸3.06b3

です。

---かかし

[ ]
RE:06903 bug? existfileNo.06906
Arimac さん 00/11/28 21:46
 
> Arimacさん今日は、ひろです。
>> 秀丸の機能だったようです(^^;;
> 色々試して頂いたようで有り難うございます。
> 因みに WindowsNT4.0 では、
>message str(existfile("<>"));
>の結果はなんになるんでしょう?

WindowsNT4.0(SP6)秀丸v3.06β3
<>"*.? が1

Windows95(B)秀丸v3.01
*.? が1

になりました。
(それぞれ1文字づつテスト)

[ ]
RE:06902 bug? existfileNo.06916
Arimac さん 00/11/29 12:35
 
>ファイル名に何も入れなくても秀丸に関連付けた
>ファイルが出てきました(^^;
>秀丸の機能だったようです(^^;;

秀丸に関連付けたファイルが出てくるのでは
なくて、単に前にユーザー指定していた
パターンでセレクトしてきている
ようでした。
# 泥沼(^^;

[ ]
RE:06916 bug? existfileNo.06918
番頭++ さん 00/11/29 12:44
 
参考になれば ... 昔の話です。

    existfile を使用して、存在確認をするとかなり完璧な処理となりますが。

    escape;
    message str(existfile("")); //  result <== 0
    message str(existfile("."));    //  result <== 1 !!!
    message str(existfile("\x20")); //  result <== 1 ??? (space)
    message str(existfile("\x20\x20")); //  result <== 1 ??? (space)
endmacro;

    existfile は仕様どうりに動いている。???

    if( existfile("c:\\temp\\.")){  //  ディレクトリ存在確認に便利です !!!
        message "c:\\temp は存在する !!!";
    }
    if( ! existfile("c:\\tmp\\.")){
        message "c:\\tmp は存在しない !!!";
    }
endmacro;

[ ]
RE:06918 bug? existfileNo.06922
かかし さん 00/11/29 14:06
 
かかしです、こんにちは。

ごみで失礼。

>参考になれば ... 昔の話です。

昔の話しに突っ込むのもなんですが(笑)

>    existfile を使用して、存在確認をするとかなり完璧な処理となりますが。
>
>    escape;
>    message str(existfile("")); //  result <== 0
>    message str(existfile("."));    //  result <== 1 !!!
>    message str(existfile("\x20")); //  result <== 1 ??? (space)
>    message str(existfile("\x20\x20")); //  result <== 1 ??? (space)
>endmacro;

後者ふたつは、0が返ってましたよ。
ver3.06b3

---かかし

[ ]
RE:06922 bug? existfileNo.06923
番頭++ さん 00/11/29 14:33
 
>>    existfile を使用して、存在確認をするとかなり完璧な処理となりますが。
>>    escape;
>>    message str(existfile("")); //  result <== 0
>>    message str(existfile("."));    //  result <== 1 !!!
>>    message str(existfile("\x20")); //  result <== 1 ??? (space)
>>    message str(existfile("\x20\x20")); //  result <== 1 ??? (space)
>>endmacro;

>後者ふたつは、0が返ってましたよ。
>ver3.06b3
>---かかし

c:\ (ルート) とか、c:\work (ファイル無し) とかでテストしてみてください。

[ ]
RE:06923 bug? existfileNo.06924
かかし さん 00/11/29 14:57
 
かかしです、こんにちは。

>>後者ふたつは、0が返ってましたよ。
>>ver3.06b3
>>---かかし
>
>c:\ (ルート) とか、c:\work (ファイル無し) とかでテストしてみてください。

c:\a.txt 上で動かした結果
message str(existfile(""));           ←0
message str(existfile("."));          ←0
message str(existfile("\x20"));       ←0
message str(existfile("\x20\x20"));   ←0

c:\a\a.txt 上で動かした結果
message str(existfile(""));           ←0
message str(existfile("."));          ←1
message str(existfile("\x20"));       ←0
message str(existfile("\x20\x20"));   ←0

NT4.0 ですが、なにか違うのかなあ???

---かかし

[ ]
RE:06924 bug? existfileNo.06926
番頭++ さん 00/11/29 15:11
 
>NT4.0 ですが、なにか違うのかなあ???

あちきのは Windows 95 OSR 2.0, Hidemaru 3.05 です。
「秀丸」が何らかのリターンコードの処理を変えない限り、
各 Windows の関数のリターンコードに依存しているのだと思うのですが。

//  これは、existfile の仕様ですか ??? - 1998/05/20
    $wk1 = "\x20";
    if( existfile($wk1) ){ message "existfile"; }
    if( existfile($wk1) ){ readonlyopenfile $wk1; }
endmacro;

> これはどおみてもバグですね(^^;
> 調べます。

これも昔の話で、> 誰の言葉かわかりません。。。

[ ]
RE:06926 bug? existfileNo.06929
かかし さん 00/11/29 15:49
 
かかしです、こんにちは。

>>NT4.0 ですが、なにか違うのかなあ???
>
>あちきのは Windows 95 OSR 2.0, Hidemaru 3.05 です。
  :
>> これはどおみてもバグですね(^^;
>> 調べます。
>
>これも昔の話で、> 誰の言葉かわかりません。。。

3.06になって修正されたとか、ありそうですね。

担当さ〜ん(^<


---かかし

[ ]
RE:06926 bug? existfileNo.06930
える さん 00/11/29 16:00
 
>「秀丸」が何らかのリターンコードの処理を変えない限り、
>各 Windows の関数のリターンコードに依存しているのだと思うのですが。

そうですね、簡単なファイル名からファイル/ディレクトリ確認のコードは

( GetFileAttributes(filename) != (DWORD)-1 )

あたりなんで、このへんから来る仕様かなー?

この API, "foo.txt" がある状態で "foo.txt " に対して
使うと "foo.txt" の結果を返します。

". " に対して実行すれば "." の結果が戻ります。

" " に対しては (DWORD)-1 を返すので not found.
でも、秀丸が現在の作業ディレクトリ (not cwd) からの
相対パスを自作しているとすれば、

C:\work\a.txt を作業中に " " に対して上記作業をすると
"C:\work\ " に対する API 呼び出しになって "C:\work\" の
情報が戻ってしまうことに。

... まあ秀丸が中で何やってるかはわからないですが。

[ ]
RE:06930 bug? existfileNo.06933
秀丸担当 さん 00/11/29 18:01
 
>そうですね、簡単なファイル名からファイル/ディレクトリ確認のコードは
>
>( GetFileAttributes(filename) != (DWORD)-1 )

existfileの処理は、
WindowsのAPIのFindFirstFileを呼んでいるだけです。
ファイル名の加工もしていません。
改善するべきでしょうか。このままで問題無ければこのままで
いきたいですが。

[ ]
RE:06929 bug? existfileNo.06934
ひろ さん 00/11/29 19:07
 
 皆さん今日は、ひろです。色々検証して頂きm(_|_)m。
> 3.06になって修正されたとか、ありそうですね。
 因みに現在 β test 中の鶴亀メールでも、私の環境 (Windows98+鶴亀
Ver.0.50) では existfile("<>") の返り値は 0 で、いただきマンモさんの
環境 (Windows2000+鶴亀 Ver.0.50) では 1 のようなので、秀丸の version
ではなく、OS もしくは file system による違いだと思います。

 そういえば、file system を書き忘れていましたが、FAT32 です。

[ ]
RE:06934 bug? existfileNo.06935
かかし さん 00/11/29 19:22
 
かかしです、こんにちは。

>> 3.06になって修正されたとか、ありそうですね。
> 因みに現在 β test 中の鶴亀メールでも、私の環境 (Windows98+鶴亀
>Ver.0.50) では existfile("<>") の返り値は 0 で、いただきマンモさんの
>環境 (Windows2000+鶴亀 Ver.0.50) では 1 のようなので、秀丸の version
>ではなく、OS もしくは file system による違いだと思います。

結果から推測すれば

NT系だと 1
98系だと 0

になるということですね?

#Win MEだと 0?

> そういえば、file system を書き忘れていましたが、FAT32 です。

こちらもFATでした。

---かかし

[ ]
RE:06933 bug? existfileNo.06936
ひろ さん 00/11/29 20:01
 
 秀丸担当様今日は、ひろです。
> 改善するべきでしょうか。このままで問題無ければこのままで
 出来れば改善していただきたいですが、取り敢えず document を変更しま
す。

[ ]
RE:06936 bug? existfileNo.06961
秀丸担当 さん 00/12/01 18:54
 
>出来れば改善していただきたいですが、取り敢えず document を変更しま
>す。

了解しました。改善できるよう検討します。
FindFirstFileを使わないのが無難かな..

[ ]
RE:06961 bug? existfileNo.06972
ひろ さん 00/12/02 12:09
 
 秀丸担当様今日は、ひろです。
> >出来れば改善していただきたいですが、取り敢えず document を変更しま
> >す。
>
> 了解しました。改善できるよう検討します。
 よろしくお願いします。

 ##って、もう問題の macro は library に登録していたりして(^^;。

[ ]