サブフォルダ・再帰的検索
Posted: 2010年3月31日(水) 13:09
いつもおせわになってます。
今、あるフォルダ内のすべての音楽ファイル(特定の拡張子)を検索しリストを得ようとしています。
再帰的方法で、次々とサブフォルダから音楽ファイルを検索し、リストするプログラムを作ってみました。
しかし、 deque<string> 的なものを、再帰的にスタックしていく方法でやってみると、あっというまにオーバーフローしてしまいました。
(bad_alloc ??)
サイズがといよりも、deque<std::string>を作りすぎた・・・?
理想としては、ウィンドウズメディアプレイヤーのフォルダ登録的なものを想像しています。
失敗したやり方は単純で、再帰的検索の王道って感じです。
最初に、関数を作成。
その引数にフォルダパスを指定。戻り値はdeque<std::string>。
この関数の役目は、まず指定フォルダ中のすべてのwavファイルとサブフォルダをリスト化、そのサブフォルダパスを同じ関数に引数として渡す。戻ってきたdeque<std::string> と、wavファイルパスをリスト化したdeque<std::string>のふたつを融合、そしてreturn。
サブフォルダがない場合は、もっとも深いところとなり、wavファイルのリストのみがreturnする。
これで、フォルダ以下のすべてのwavファイルの検索ができる。(はずだと思ってた)
結果、上層を指定するとみごとにオーバーフローしました。
だいたい3階層ぐらいまではテストして成功したんですが、限度があるようで^^;
ユーザーが選んだフォルダ内の音声ファイル(特定の拡張子)を、すべてリスト化するのに、もう少し安全な方法はないでしょうか?
今、あるフォルダ内のすべての音楽ファイル(特定の拡張子)を検索しリストを得ようとしています。
再帰的方法で、次々とサブフォルダから音楽ファイルを検索し、リストするプログラムを作ってみました。
しかし、 deque<string> 的なものを、再帰的にスタックしていく方法でやってみると、あっというまにオーバーフローしてしまいました。
(bad_alloc ??)
サイズがといよりも、deque<std::string>を作りすぎた・・・?
理想としては、ウィンドウズメディアプレイヤーのフォルダ登録的なものを想像しています。
失敗したやり方は単純で、再帰的検索の王道って感じです。
最初に、関数を作成。
その引数にフォルダパスを指定。戻り値はdeque<std::string>。
この関数の役目は、まず指定フォルダ中のすべてのwavファイルとサブフォルダをリスト化、そのサブフォルダパスを同じ関数に引数として渡す。戻ってきたdeque<std::string> と、wavファイルパスをリスト化したdeque<std::string>のふたつを融合、そしてreturn。
サブフォルダがない場合は、もっとも深いところとなり、wavファイルのリストのみがreturnする。
これで、フォルダ以下のすべてのwavファイルの検索ができる。(はずだと思ってた)
結果、上層を指定するとみごとにオーバーフローしました。
だいたい3階層ぐらいまではテストして成功したんですが、限度があるようで^^;
ユーザーが選んだフォルダ内の音声ファイル(特定の拡張子)を、すべてリスト化するのに、もう少し安全な方法はないでしょうか?
