チケット #26741

DispFileProperty()の修正案

登録: 2011-11-13 22:26 最終更新: 2011-11-23 12:49

報告者:
(匿名)
担当者:
(未割り当て)
チケットの種類:
状況:
完了
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
なし

詳細

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

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

チケットの履歴 (6 件中 3 件表示)

2011-11-13 22:26 更新者: None
  • 新しいチケット "DispFileProperty()の修正案" が作成されました
2011-11-13 23:34 更新者: s_kawamoto
コメント

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

2011-11-14 00:06 更新者: s_kawamoto
コメント

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

2011-11-14 19:34 更新者: None
コメント

不完全なバグレポートですみません。もうちょっとややこしい条件があったようです。
"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 更新者: s_kawamoto
コメント

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

2011-11-23 12:49 更新者: s_kawamoto
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2011-11-23 12:49 に更新されました

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする