フォルダ内のファイルの順次移動について
Posted: 2014年5月05日(月) 19:30
簡単な画像ビューワをC++(BCC Developer/Win32アプリケーション)で製作しています。(Windows 7 HP)
Windows7に付属の画像ビューワのようにウインドウ上の「←」「→」のボタンでフォルダ内の画像ファイルを(現在表示されている画像から)一つ次に進めたり、逆方向に一つ進めたりという機能を実装したいと思っているのですが、その方法で詰まっています。
現在はWin32APIの「FindFirstFile()」+「FindNextFile()」を使い以下の①~③の手順でフォルダ内のファイル情報を取得し、次の画像へ移動しています。
①FindFirstFile()、FindNextFile()で、現在表示されている画像が入っているフォルダ内のファイルを全て列挙。
ファイル名を文字配列に格納。(拡張子を見て画像ファイルでないものは格納しない)
②その文字配列の中で、「現在表示されている画像のファイル名」がどの位置にあるのか調べる。
③判明した位置から、その配列の並びで一つ下(一つ上)のファイル名を取得。
ただしこの方法では、(フォルダ内の内容が変わらないという保証が無い限り)一々フォルダ内のファイルを全列挙しなければならず、ファイル数が多くなれば処理の負担が大きくなります。
更に「文字配列の並びで一つ下、一つ上のファイル名を取得」していますが、これはエクスプローラーでその時にソートされている並びとは無関係なので、(例えばエクスプローラーがファイルを「サイズ」でソートしているときでも、この文字配列の並びにはそれは反映されません(自分が試した結果ではファイル名順になっている様です。))、
画像ビューワとしては非常に使いにくいものになってしまいます。
Win7付属のフォトビューワを見てみると、これはエクスプローラーのソート順に対応していますし、フォルダ内のファイルの数が多くなっても動作速度に変化はないように思えます。
同一フォルダ内のファイル巡回機能(一つ先のものに進んだり、前のものに戻ったり)の実装に当たってはどのような設計で製作すれば良いでしょうか。
(※調べていて、「シェル」というものの知識が必要なようで、いくつか関連するサイトを読んでいるのですが
http://www.kab-studio.biz/Programing/Co ... on/05.html
非常に難しく、また中々自分の目的の箇所(例えばエクスプローラーのソート順の取得など)を見つけられず今回この質問を書いています。シェルについての理解はその程度のものなので自分の今の力では難しい実装なのかもしれませんが、もし可能であればよろしくお願いします。)
Windows7に付属の画像ビューワのようにウインドウ上の「←」「→」のボタンでフォルダ内の画像ファイルを(現在表示されている画像から)一つ次に進めたり、逆方向に一つ進めたりという機能を実装したいと思っているのですが、その方法で詰まっています。
現在はWin32APIの「FindFirstFile()」+「FindNextFile()」を使い以下の①~③の手順でフォルダ内のファイル情報を取得し、次の画像へ移動しています。
①FindFirstFile()、FindNextFile()で、現在表示されている画像が入っているフォルダ内のファイルを全て列挙。
ファイル名を文字配列に格納。(拡張子を見て画像ファイルでないものは格納しない)
②その文字配列の中で、「現在表示されている画像のファイル名」がどの位置にあるのか調べる。
③判明した位置から、その配列の並びで一つ下(一つ上)のファイル名を取得。
ただしこの方法では、(フォルダ内の内容が変わらないという保証が無い限り)一々フォルダ内のファイルを全列挙しなければならず、ファイル数が多くなれば処理の負担が大きくなります。
更に「文字配列の並びで一つ下、一つ上のファイル名を取得」していますが、これはエクスプローラーでその時にソートされている並びとは無関係なので、(例えばエクスプローラーがファイルを「サイズ」でソートしているときでも、この文字配列の並びにはそれは反映されません(自分が試した結果ではファイル名順になっている様です。))、
画像ビューワとしては非常に使いにくいものになってしまいます。
Win7付属のフォトビューワを見てみると、これはエクスプローラーのソート順に対応していますし、フォルダ内のファイルの数が多くなっても動作速度に変化はないように思えます。
同一フォルダ内のファイル巡回機能(一つ先のものに進んだり、前のものに戻ったり)の実装に当たってはどのような設計で製作すれば良いでしょうか。
(※調べていて、「シェル」というものの知識が必要なようで、いくつか関連するサイトを読んでいるのですが
http://www.kab-studio.biz/Programing/Co ... on/05.html
非常に難しく、また中々自分の目的の箇所(例えばエクスプローラーのソート順の取得など)を見つけられず今回この質問を書いています。シェルについての理解はその程度のものなので自分の今の力では難しい実装なのかもしれませんが、もし可能であればよろしくお願いします。)