質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • C++

    4315questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

C++ ファイル名を指定して中身を自動で定義

受付中

回答 6

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,120

ness

score 1

C++での質問です。

前提としてファイルがあり、
ファイル名が A
その中身に ab.mp4 ac.mp4 ad.mp4
が在るとします。

ファイル名のみを指定して
char* fileList[]={"ab.mp4","ac.mp4","ad.mp4"}
が自動で作られるコードは可能でしょうか。

もし可能ならば、サンプルコードをぜひお願いします。
または類型でも構いません。

====== 追記 =====
失礼しました。
ファイルではなく フォルダーです。
フォルダーの中にmp4のファイルが3つあるという状況です。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ness

    2017/01/17 15:03

    どのような切り口で調べたらいいかも判りません。

    キャンセル

  • 退会済みユーザー

    2017/01/17 21:12

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 6

+2

こんにちは。

フォルダーの中にmp4のファイルが3つあるという状況です。

普通に作るとOSによってコードは全く異なります。
boost::filesystemを使えば、そこそこ同じコードで複数のOSに対応できます。

boostのほとんどのライブラリはヘッダのみインクルードすれば使えますが、filesystemは例外の1つなのでboostのビルドが必要になります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/17 15:32

    OSはwindows10 です。
    上手く使えるか試してみます。ありがとうございました。

    キャンセル

  • 2017/01/17 15:47

    boostは準標準ライブラリ的な位置にあるライブラリですので、boostでできることはWindows APIを学習するよりboostを学習した方がためになるケースが多いと思います。
    最初にビルドできるようになるのは少し苦労しますが、boostのビルド方法を解説しているサイトも多いですので頑張って下さい。
    http://umezawa.dyndns.info/wordpress/?p=5781

    キャンセル

  • 2017/01/17 17:17

    横から失礼します。コンパイラーがVC++であるのならboost binaryにビルド済みのインストーラが有ります。VCのバージョンごとにインストーラが違うのでバージョンに合わせてダウンロードしてインストールすれば使えるようになります。アドレスは以下です。
    https://sourceforge.net/projects/boost/files/boost-binaries/1.63.0/
    なお、boostjpというサイトには詳しい日本語情報があります。
    https://boostjp.github.io/

    キャンセル

+1

憶測ですが...
テキストファイルの中に ab.mp4 などが書かれていて、それを文字列型の配列変数に代入したいということでしょうか?
サンプルは差し上げませんが(時間がない)
「正規表現」「正規構文」のライブラリが使えれば、テキストから特定の表現を引っこ抜くことが便利ですよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/17 15:07

    ありがとうございます。 調べてみます。

    キャンセル

  • 2017/01/17 15:19

    申し訳ありません。 テキストファイルなどではなくフォルダーの中にあります。 質問文に誤字を追記しました。

    キャンセル

+1

追記に対して:C++ ファイル 一覧 取得 でググれば死ぬほど出てくるのでは…


んん…そんなコードをテンプレートにしたいって意味とは違うと思うので
※ファイル読み取って別のファイルにchar* fileList[]={"ab.mp4","ac.mp4","ad.mp4"} って書きたいわけじゃないですよね
ある文字列を複数の文字列に分割したいって意味に読み替えて言います。

std string split でググって出てくる回答がコレです。


訳)
文字列を指定した区切り文字で分割するにはこのようにしています。
最初の方は予め指定されたvectorに結果を格納し、2個目は新しいvectorを生成して結果を返します。

#include <string>
#include <sstream>
#include <vector>

void split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss;
    ss.str(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
}


std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, elems);
    return elems;
}


注意点:
この解決方法では空のトークンをスキップしないので、以下のような場合空を含む4つの文字列を返します。

std::vector<std::string> x = split("one:two::three", ':');

他の回答も色々参考になると思います。
ストリームを直接分割する方法は無駄がない分高速ですしね。

使い方:
つまりこういう風にすれば…

std::vector<std::string> mp4s = split("ab.mp4 ac.mp4 ad.mp4", ' ');


3つの文字列の配列が得られます。
std::stringのメソッドc_str()を使えば文字列のポインタ(const char*)は得られますし、vectorに格納されるので要素数やイテレーションは簡単にかけます。
ファイルを文字列として読み取って、スプリットしましょう。

その他STLのことはググってください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/17 15:29

    検索内容が的外れだったみたいです。 その文言で再度検索します。ありがとうございました。

    キャンセル

0

実現するロジックのヒントです。
ファイルAを開く
中身を読み込む
ファイルAを閉じる
中身をスペースで区切ってfilelistの配列に入れる
何かをする(させる)のを書くのがプログラムなので、プログラムの勉強中ならば
実現方法は自分で調べてみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

フォルダー内のファイル列挙であれば例えば
C++言語でディレクトリ内のファイル一覧取得(windows編)
が参考になるかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

Visual Sudio 2015 でおためし(Boost不使用/Visual C++だけでコンパイルできるっす): 
コマンドラインで指定したdir.のナカミを列挙する

#include <string> 
#include <iostream> 
#include <filesystem> 

using namespace std; 
using namespace std::experimental::filesystem::v1; // path, directory_iterator

int main(int argc, char** argv) { 
  string dir = argc == 0 ? "." : argv[1];
  path p(dir);
  if (!is_directory(p)) { 
    cout << "No such directory: " << dir << endl; 
    return 1; 
  } 
  for (const auto& entry : directory_iterator(p) ) {
    if (is_regular_file(entry.status())) { 
      cout << " File: " << entry.path().filename() << endl;
    } else if (is_directory(entry.status())) { 
      cout << " Dir: " << entry.path().filename() << endl; 
    } 
  } 
}  

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • C++

    4315questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。