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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

Q&A

解決済

2回答

747閲覧

c++ file名の読み込み

MF_19

総合スコア27

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

0グッド

0クリップ

投稿2018/06/22 06:49

編集2018/06/22 07:41

前提・実現したいこと

c++にて
ディレクトリ内のjpgファイルをすべて読み込んで img_load_func関数に引数で渡したいです。

(unsigned charをfor分から外してコンパイルすると)pを出力すると下記結果となっています。

p出力結果

.\test\0213test.jpg .\test\test\0213test.jpg .\test\test\0213test.jpg .....

viusalstudio2015でfilesysytemを使用しています。
実現できればこの方法でなくても問題ありませんので、
よろしくお願いします。

発生している問題・エラーメッセージ

現状pをimg_load_funcに引数で渡すと下記エラーとなります。

Error (active) no suitable conversion function from "const std::experimental::filesystem::v1::directory_entry" to "char *" exists nnpack_testc: \Users\…\nnpack_test\nnpack_test.cpp

該当のソースコード

c++

1#include <iostream> 2#include <fstream> 3#include <string> 4#include <filesystem> 5namespace fs = std::experimental::filesystem::v1; 6 7int main(int argc, char *argv[]) 8{ 9 .... コード省略 10 11 int width, height; 12 char* filename = argv[2]; 13 14 IMG_LOAD_FUNC img_load_func = (IMG_LOAD_FUNC)GetProcAddress(hDLL, "load_image"); 15 if (img_load_func == NULL) { 16 std::cerr << "Failed to get address of load_image!" << std::endl; 17 fflush(stdout); 18 FreeLibrary(hDLL); 19 return -1; 20 } 21 std::string path = filename; 22 for (auto & p : fs::directory_iterator(path)) { 23 std::cout << p << std::endl; 24 25     unsigned char* pixels = img_load_func(p, &width, &height); 26 fflush(stdout); 27} 28 29.... コード省略 30return 0; 31} 32

補足情報(FW/ツールのバージョンなど)

visual studio2015

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2018/06/22 07:26

IMG_LOAD_FUNCの定義を記載してください。また、「ファイルパスのままなので」とありますが、ファイルパスのフォルダ部分は不要なのですか?文字列化したいだけですか?
MF_19

2018/06/22 07:35

失礼しました。その部分間違えていました。 必要なので、質問書き直します。
guest

回答2

0

フォルダの中のファイルの列挙は、FindFirst とFindNextのAPI関数を使います


あ、違った。
FindFirstFile,FindNexrFile,FindClose だった<Win32API

投稿2018/06/22 06:56

編集2018/06/22 07:01
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MF_19

2018/06/22 07:24

ありがとうございます、可能であればサンプルコード頂けると助かります。
guest

0

ベストアンサー

こんにちは。

VC++の実装が標準規格通りかどうか把握していませんが、もし、標準規格通りならば下記で行けると思います。

unsigned char* pixels = img_load_func(p.path().c_str(), &width, &height);

directory_iteratoroperator*()(範囲ベースforはループ変数に*イテレータを設定します。)
directory_entrypath()
pathc_str()

投稿2018/06/22 07:27

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MF_19

2018/06/22 07:37

Error (active) argument of type "const std::experimental::filesystem::v1::path::value_type *" is incompatible with parameter of type "char *" nnpack_test c:\Users....\nnpack_test\nnpack_test\nnpack_test.cpp
MF_19

2018/06/22 07:38

ありがとうございます。ビルドを試してみましたが、上記のエラーとなっています。
Chironian

2018/06/22 08:05

ならば以下で行けるかも。 unsigned char* pixels = img_load_func(p.path().string().c_str(), &width, &height);
MF_19

2018/06/22 08:14

Error (active) argument of type "const char *" is incompatible with parameter of type "char *" 現状このようになってます。エラーコードを調べています。
takabosoft

2018/06/22 08:30

IMG_LOAD_FUNCの第一引数がchar* なんですよね?c_str()はconstが付いているため、変換エラーが出ると思います。おそらくですが、dll関数の第一引数を(const char *)型にしたほうが良いと思います(可能であらば)。
PineMatsu

2018/06/22 08:32

横から失礼します。const付きがだめというエラーのようなので、const_castでconst外しをしてやったら動くんじゃないでしょうか?
Chironian

2018/06/22 08:43

img_load_funcは名前からして、先頭パラメータで渡されたパスを書き換えたりしないのでは? もし、YESの場合は、 1. img_load_funcを修正して、先頭パラメータの型をchar*からchar const*へ修正するのがベストです。 2. img_load_func側の修正が難しい場合等、手を抜くなら以下もありです。 unsigned char* pixels = img_load_func(const_cast<char*>(p.path().string().c_str()), &width, &height); ただし、もしも、先頭パラメータで渡されたパスを書き換えるような関数ならば 1.は解決になりません。2.は絶対やってはだめです。ちょっとばかし面倒な手順が必要になります。
MF_19

2018/06/22 10:14

皆さんご丁寧にありがとうございます。 1の方法で解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問