Ver.11.4〜8ぐらいの話(ディレクトリの深遠に潜むもの)
ダウンロード
Ver.11.8.0.1299
フルセット版ダウンロード
アップデート専用版ダウンロード
開発時の履歴
まだ作業途中で、ファイルオープン系の関数の代替が作業未着手ですが、通常の使い方で問題ないレベルまで仕上がってきました。
極力、深パス対応が他に影響が及ばないように慎重に作業しているつもりですが、この時点で何かしら問題がありましたらご連絡ください。
CreateProcess()など、Windows APIが原因でどうやっても対処できないモノなどが今回明確になりつつあります。
奥深追い検証はあまりお勧めしませんが、Windowsやセキュリティソフトの色々な面が見えてきますので実に興味深いです。
なるべく、今までに他に類を見ない動きがさり気なく、ごく当たり前に、意識しないで実現可能になるようにという方向性で進めたいと考えています。(^^;
追記
予定していた作業は完了しましたが、まだまだ対処が必要な点が多いようです。
例えば、コンボボックス、リストビューと、コンポーネントレベルでMAX_PATHを超えられない呪い制限がありました。
気長にボチボチやるしかありませんねぇ・・・遠い目
Ver.11.8.0.1299
●β修正
・新規作成のメニューの中にEXCELが存在している環境でEXCELファイルの新規作成ができなくなっていた不具合の修正
・異常なファイル名のリネームが機能しなくなっていた不具合の修正
●深いパス対応
・PathAppend()を使用しないように変更
・GetIconLocation()を使用しないように変更
・ショートカットから実体名を取り出す処理の長パス対応(上限があるので可能な範囲のみ)
・外部プロセスの起動モードで、終了を待つタイプの動作のパス長の制限を解除
・ITEMIDLISTからフルパスを取得する関数のパス長の制限を解除
・shell32.dllから文字列を取得する関数の文字列長を32KBに拡張
・指定したexeからウィンドウハンドルを求める関数の長パス対応
・古いOSを対象としたロングファイル名取得関数の長パス対応
・Shell_GetCachedImageIndexを使うアイコン画像の取得処理の長パス対応
・ツリーのコンテキストメニューのOS部分の長パス対応(※悪意あるシェル拡張ソフトの検出用)
・ユーザー操作以外では_wrename()を使用しないように変更
●CStdioFileクラスを使用しないように変更
・ログ出力(検証を依頼する版のコンパイラオプション時のみアクティブ化)
・ファイル一覧出力(FileExport)
・フィルタ定義ファイルの読み込み
・フィルタ定義ファイルの読み込み(Fin)
●CFileクラスを使用しないように変更
・プレビュー(内蔵テキスト)
・キー割り当てファイルの読み書き(リスト/ツリー/オプション)
・キー割り当てをファイルにして保存×2(オプション)
・AllCommand.txtの生成する隠し機能(オプション)
・ファイルの中身をコピー
・ファイル一覧出力(Fin)
・新規作成の中のzip書庫(コンテキストメニュープレースホルダ/ポップアップメニュー/FileNewEx)
・スクリプト(FileOpen/FileWritew/FileWriteA/FileClose)
・テンプレートファイル読み込み(FileInfo)
・ImageListの保存/読込
●テキスト文字コード変換コマンド
・UNICODEの場合BOMを付与するオプションでUTF8を対象に追加した
※Windowsが返してくるシステムが対応しているコードページリストにUTF32LE/UTF32BEが無いので保留
●文字コード処理の見直し
・文字コード判定の日本語対応を強化、ただし非日本語圏は劣化
・ファイル情報コマンドのテンプレート(FileInfo.tmp)の読み込み文字コードがSJISになっていたのでUNICODEに変更
●不具合修正
・スクリプトのFileOpenMode、BomOutで0がセットできない不具合の修正
・必要な画像が存在しない場合に起動できない不具合の修正
Ver.11.7.0.871
●β版修正
・ワーニングの修正×2
●深いパス対応(共通処理)
・DragQueryFile()の長パス対応関数を追加
・レジストリの文字列読み込みの最大長を32K文字に変更
・StrRetToBuf()の長パス対応関数を追加
・入力補完コンボボックスの長パス対応(MArcを除く)
●深いパス対応(個別で実装)
・DragQueryFile()を使用しないように変更
・FindFirstFileEx()を使用しないように変更(ファイル名だけでMAX_PATHを超えるものは速度低下が著しいので未対応)
・GetModuleFileName()を使用しないように変更
・_wfullpath()を使用しないように変更
・StrRetToBuf()を使用しないように変更
●高速動作する関数を用意しているに未適用であった項目
・GetWindowsDirectory()の置き換え(多数)
・GetSystemDirectory()を置き換え(多数)
●その他
・lnkファイル解析処理で、無駄なメモリ転送と確保があったので省略して速度向上させた
●不具合修正
・リストの「選択状態」のコンテキストメニューの「シェル項目を上に表示する」が、「未選択状態」の設定値を使用していた不具合の修正
・タブバーでの左クリック動作を丸ごと作り直した
Ver.11.6.2.619
●β版修正
・ネットワークの長パスをロングファイル名に変換する際に、ローカルの長パスと誤判定する不具合の修正
●深いパス対応(個別で実装)
・ファイルオープン系の処理の長パス対応
・TxvのみMFCのコマンドライン解析を使用しないようにして長パス対応アプリにした
●不具合修正
・オプションから本体のexeを探すパスの扱いで未処理の相対パス指定があった不具合の修正
・テキストをサムネイル画像にする際にメモリリークする可能性がある不具合の修正
・タブバーでダブルクリックしたときのチャタリング防止処理が機能していなかった不具合の修正
●その他
・拡張子分割文字列の生成で文字列長のカウントしないようにして高速化
・複数あったフルパスを分解してファイル名を返す処理を速い方に統一して使うように変更
(リスト上のマウスクリックでバックグラウンドで開く場合のみ使用していた)
Ver.11.5.3.443
●深いパス対応(共通処理)
・ネットワーク対応したデバイス名の取得関数を追加
・長パス対応のパス分割関数の関数を作成
・長パス対応のGetFileAttributes()のラッパ関数を追加
・長パス対応のファイル存在チェック関数を作成
・検索系の一連の処理を作り直した
・従来のロングファイル名の取得関数(今まで未使用)をチューニングして0.85〜30,000倍速に向上
・ShellExecute()対応
●深いパス対応(本体)
・更新検出処理の見直し
・更新通知の受け取り処理の見直し
・更新インデックスの管理を見直した
・_tsplitpath_s/_wsplitpath_sのパスの分割関数を使わないように変更
・GetFileAttributes()を使わないように変更
・FileExistance()を使わないように変更
●深いパス対応(外部コマンド)
・本体に準じた対応
●その他
・ファイルサイズを求める関数を抜本的に作り直して大幅に高速化した
(が、元がマイクロ秒単位なのでほとんど誤差)