C++での質問です。
前提としてファイルがあり、
ファイル名が A
その中身に ab.mp4 ac.mp4 ad.mp4
が在るとします。
ファイル名のみを指定して
char* fileList[]={"ab.mp4","ac.mp4","ad.mp4"}
が自動で作られるコードは可能でしょうか。
もし可能ならば、サンプルコードをぜひお願いします。
または類型でも構いません。
====== 追記 =====
失礼しました。
ファイルではなく フォルダーです。
フォルダーの中にmp4のファイルが3つあるという状況です。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
こんにちは。
フォルダーの中にmp4のファイルが3つあるという状況です。
普通に作るとOSによってコードは全く異なります。
boost::filesystemを使えば、そこそこ同じコードで複数のOSに対応できます。
boostのほとんどのライブラリはヘッダのみインクルードすれば使えますが、filesystemは例外の1つなのでboostのビルドが必要になります。
投稿2017/01/17 06:23
総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/17 06:32
2017/01/17 06:47
2017/01/17 08:17
0
**追記に対して:**C++ ファイル 一覧 取得 でググれば死ぬほど出てくるのでは…
んん…そんなコードをテンプレートにしたいって意味とは違うと思うので
※ファイル読み取って別のファイルにchar* fileList[]={"ab.mp4","ac.mp4","ad.mp4"}
って書きたいわけじゃないですよね
ある文字列を複数の文字列に分割したいって意味に読み替えて言います。
std string split でググって出てくる回答がコレです。
訳)
文字列を指定した区切り文字で分割するにはこのようにしています。
最初の方は予め指定されたvectorに結果を格納し、2個目は新しいvectorを生成して結果を返します。
C++
1#include <string> 2#include <sstream> 3#include <vector> 4 5void split(const std::string &s, char delim, std::vector<std::string> &elems) { 6 std::stringstream ss; 7 ss.str(s); 8 std::string item; 9 while (std::getline(ss, item, delim)) { 10 elems.push_back(item); 11 } 12} 13 14 15std::vector<std::string> split(const std::string &s, char delim) { 16 std::vector<std::string> elems; 17 split(s, delim, elems); 18 return elems; 19}
注意点:
この解決方法では空のトークンをスキップしないので、以下のような場合空を含む4つの文字列を返します。
C++
1std::vector<std::string> x = split("one:two::three", ':');
他の回答も色々参考になると思います。
ストリームを直接分割する方法は無駄がない分高速ですしね。
使い方:
つまりこういう風にすれば…
C++
1std::vector<std::string> mp4s = split("ab.mp4 ac.mp4 ad.mp4", ' ');
3つの文字列の配列が得られます。
std::stringのメソッドc_str()
を使えば文字列のポインタ(const char*)は得られますし、vectorに格納されるので要素数やイテレーションは簡単にかけます。
ファイルを文字列として読み取って、スプリットしましょう。
その他STLのことはググってください。
投稿2017/01/17 06:13
編集2017/01/17 06:18総合スコア1591
0
憶測ですが...
テキストファイルの中に ab.mp4 などが書かれていて、それを文字列型の配列変数に代入したいということでしょうか?
サンプルは差し上げませんが(時間がない)
「正規表現」「正規構文」のライブラリが使えれば、テキストから特定の表現を引っこ抜くことが便利ですよ。
投稿2017/01/17 06:06
総合スコア728
0
Visual Sudio 2015 でおためし(Boost不使用/Visual C++だけでコンパイルできるっす):
コマンドラインで指定したdir.のナカミを列挙する
C++
1#include <string> 2#include <iostream> 3#include <filesystem> 4 5using namespace std; 6using namespace std::experimental::filesystem::v1; // path, directory_iterator 7 8int main(int argc, char** argv) { 9 string dir = argc == 0 ? "." : argv[1]; 10 path p(dir); 11 if (!is_directory(p)) { 12 cout << "No such directory: " << dir << endl; 13 return 1; 14 } 15 for (const auto& entry : directory_iterator(p) ) { 16 if (is_regular_file(entry.status())) { 17 cout << " File: " << entry.path().filename() << endl; 18 } else if (is_directory(entry.status())) { 19 cout << " Dir: " << entry.path().filename() << endl; 20 } 21 } 22} 23
投稿2017/01/18 00:48
編集2017/01/18 00:52総合スコア16614
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
フォルダー内のファイル列挙であれば例えば
C++言語でディレクトリ内のファイル一覧取得(windows編)
が参考になるかと思います。
投稿2017/01/17 08:31
総合スコア3579
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。