>前回は気が付きませんでしたが、上書き確認の後にパス長確認になっています。
>なので、フックを使わない場合上書き確認でOKした後パス長でエラーとなります。
>フックを使う場合、プロシージャ内で_MAX_PATH未満にパスを切り詰めているので
>上書き確認できず、たまたまパス長エラーだけが表示されます。
>(切り詰めたパス名と同名ファイルがあると上書き確認される)
OFNHookProc()のcase CDN_FILEOK: 処理のところですね.確かに...
>セーブダイアログは必ずフックを使用しプロシージャ内でもパス長チェックする
>のが理想的と思いますが、今回そこまでは修正していません。
まあ,微妙なところなのでこのままでも良いのではないでしょうか.
>260バイト以上のパス長のファイルは、"C:\a"のような1文字フォルダに長い
>ファイル名のファイルを作成しフォルダ名を変更すると作成可能です。
作成可能ではありますが,Windowsにアクセスを拒否されるみたいです.
--
もう一点,普通はやらないと思いますが,バックアップの詳細設定を使用して(CEditDoc::FormatBackUpPath()のm_bBackUpPathAdvanced=1の場合),たとえば $0_$0_$0_$0_$0_$0_$0_$0_$0_$0といったパターンが指定されると,バックアップ文字列がファイル名の何倍にもなり,1024バイトの内部バッファを突破して悲しいことになります.ですので,厳密に言えばCEditDoc.cppの1747行目付近のファイル名・ディレクトリ名置換,および1778行目の拡張子置換の各ループ毎に長さチェックが必要だと思います.