Ticket #26741

DispFileProperty()の修正案

Open Date: 2011-11-13 22:26 Last Update: 2011-11-23 12:49

Reporter:
(Anonymous)
Owner:
(None)
Type:
Status:
Closed
Component:
(None)
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None

Details

テスト版のlocal.cのvoid DispFileProperty() には以下のコメントがあります。 // UNCでない場合に末尾に半角スペースを置くと拡張子の補完がされなくなる

Windowsの『ファイル名末尾の「.」、半角スペースは無視される』という仕様を意図していると思いますが、 拡張子補完の抑止目的には半角スペースではダメみたいです。 Windows7で試してみたところ半角スペース+拡張子のファイルが存在すると、それが優先されます。 もう一方の"."を追加した場合は、"."より前までのパスで処理するので期待通りの結果になるみたいです。 なんでこんな動きするのかドキュメントに書いてないですが、CreateProcess()にそれっぽい説明があります。 ということで、" "の代わりに"."を追記する実装をご検討下さい。

Ticket History (3/6 Histories)

2011-11-13 22:26 Updated by: None
  • New Ticket "DispFileProperty()の修正案" created
2011-11-13 23:34 Updated by: s_kawamoto
Comment

ありがとうございます。その説明には気が付かなかったのですが、今調べてみたところ、LoadLibraryにも似たような説明がありますね。後程修正します。

2011-11-14 00:06 Updated by: s_kawamoto
Comment

残念ながらこの方法では意図したとおりに動作しませんでした。 "testdata"と"testdata..bat"を用意し、"testdata."として呼び出すと"testdata..bat"が表示されました。 他の方法を考えてみます。

2011-11-14 19:34 Updated by: None
Comment

不完全なバグレポートですみません。もうちょっとややこしい条件があったようです。
"C:\\tmp" に"testdata","testdata.bat","testdata .bat"がある状態で試してみたところ、 lpFileが絶対パスの場合はダメだけど、lpDirectoryを併用するとうまくいくようです。
4つの組み合わせで試したところ下記結果でした。なんでこんな変な仕様なんでしょうね…。
× lpDirectory=NULL; lpFile="C:\\tmp\\testdata "; ⇒ "testdata .bat"
× lpDirectory=NULL; lpFile="C:\\tmp\\testdata."; ⇒ "testdata.bat"
× lpDirectory="C:\\tmp"; lpFile="testdata "; ⇒ "testdata .bat"
○ lpDirectory="C:\\tmp"; lpFile="testdata."; ⇒ "testdata"
ちょこっと試したところだと、パスに空白が含まれる場合も大丈夫そうです。
これでもうまくいかないパターンがあったら、ごめんなさい!

2011-11-14 21:15 Updated by: s_kawamoto
Comment

他のファイルが見つからなくなるまで半角スペースを追加する方法で解決しました。 修正は次のバージョンに適用する予定です。 ご協力ありがとうございました。 http://git.sourceforge.jp/view?p=ffftp/ffftp.git;a=commit;h=700b7eb9066c105aaf9b42ad67ba43ee8c030f0b

2011-11-23 12:49 Updated by: s_kawamoto
  • Ticket Close date is changed to 2011-11-23 12:49
  • Status Update from Open to Closed

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login