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

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

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

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

IDE

IDE、統合開発環境((Integrated Development Environment)とは、テキストエディタ以上の機能を提供して、ソフトウェア開発を効率をあげるコンピュータプログラムを指す。

C++

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

Q&A

2回答

856閲覧

ClionでのC++ファイル入出力がうまくいきません・・・

coconuts0066

総合スコア8

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

IDE

IDE、統合開発環境((Integrated Development Environment)とは、テキストエディタ以上の機能を提供して、ソフトウェア開発を効率をあげるコンピュータプログラムを指す。

C++

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

0グッド

0クリップ

投稿2017/12/02 03:51

編集2017/12/02 07:24

###前提・実現したいこと
cCLionでのビルドについての質問です。最近、CLionを使い始めてまだまだ初歩的な質問です。CLionのプロジェクトの中でC++のfstreamでファイル入出力を行いたいと思っています。OSはmacOS ver. 10.12.6です。

###発生している問題・エラーメッセージ
CLion上でビルドしても例えば.txtなどをstd::ifstreamで読み込んで出力しようとしても読み込んでくれません。読み込んだデータを標準出力に出しても何も表示されませんし、読み込んでいるかどうかを判断するif文では、can't read this data.と表示されます。input.txtはmain.cppと同じ階層においています。CmakeList.txtなどに設定を加えなければならないのかと思い色々と調べたのですが解決しなかったので、質問させていただきました。CLionの方では、input.txtは灰色になっています。(main.cppは黒く表示されています)

###該当のソースコード
CMakeList.txt

CMakeList.txt

1 2cmake_minimum_required(VERSION 3.8) 3project(Test) 4 5set(CMAKE_CXX_STANDARD 11) 6 7set(SOURCE_FILES main.cpp) 8add_executable(Test ${SOURCE_FILES})

C++

1#include <iostream> 2#include <fstream> 3#include <string> 4 5 6using namespace std; 7 8int main() { 9 10 11 12 13 ifstream input("input.txt"); 14 string str; 15 16 if(!input) cout << "can't read this data."; 17 18 while(getline(input, str)){ 19 cout << str << endl; 20 } 21 22 return 0; 23}

input.txtの中身です。

input.txt

1Hello World!!=こんにちは世界。

###試したこと
ネットで調べたのですが、結局わからずじまいです。

###補足情報(言語/FW/ツール等のバージョンなど)
言語:C++
IDE:CLion

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

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

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

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

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

guest

回答2

0

こんにちは。

私もlinux始めた当初にハマったのですが、ルートにpathと言うフォルダがないということはないでしょうか?
linux界隈ではフォルダのパス(例えば、/home/ユーザ名/など)を書く部分をpathと表現することが結構あるようです。

もし、ご自身のホーム・ディレクトリに直接 input.txt を置かれているようでしたら、ifstream input("~/input.txt");と指定してみて下さい。~(チルダ)はホーム・ディレクトリのパスへ展開されます。

投稿2017/12/02 06:17

Chironian

総合スコア23272

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

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

coconuts0066

2017/12/02 06:24

ご回答ありがとうございます!投稿にミスがあり、path/input.txtではなくinput.txtのみで良かったところ間違えたプログラムのソースを貼ってしまったので修正いたしました。(main.cppとinput.txtは同じ階層にあります。) ご回答いただいたようにホームディレクトリの方にもinput.txtを移動して~(チルダ)をつけて試してみましたがうまくいきませんでした。 CLionの方では、input.txtが灰色になっている(main.cppなどは黒くなっている)状態なのです。CLionの方でinput.txtを読み込んでいないのかなとも考えられます。
Chironian

2017/12/02 07:02

ホームにinput.txtを置いて"~/input.txt"でアクセスできないのは不思議ですね。 この指定ならば開発環境の影響は受けないはずです。 main.cppがある場所と、それをコンパイルしたアプリを走らせる場所の間に直接の関係はありません。 コマンドラインで gcc を直接叩いたような時は全てカレントにできますが、多少なりと高度な開発ツール(CLionもその一つ)を使っているケースでは大抵ソースとは別の場所にアプリが生成されます。 そして、そのアプリのカレント・フォルダは、起動方法によって異なります。CLionを使って起動されていると思いますが、私はCLionを使ったことはないので把握していません。すいません。 ないとは思いますが、もしかしてWindowsですか? この辺りは OS によっても振る舞いが異なりますので OS が何かも記載されたほうがよいです。 (OSと開発環境はセットで書くとおぼえておいた方が良いかも。)
coconuts0066

2017/12/02 07:30

ご返信ありがとうございます。ホームにて動かないのは私も不思議でなりません。通常、g++でターミナルにてコンパイルを行うと期待通りの動きをしてくれるのですが、CLionでのビルドではうまくいかないのが大きな謎です。 CMakeの方での、何か指定でどうにかなる問題なのでしょうか?CMakeの方は全くの初心者で右も左も分からない状態です。 使用OSへのご指摘ありがとうございます。修正しておきました。使用OSはmacOS 10.12.6です。
Chironian

2017/12/02 09:41

CMakeはかなり使い込んでいるのですが、IDEのデバッグ実行時のカレント・フォルダ、起動パラメータ、環境変数等を設定する方法は見つかりませんでした。私はVisual Studioでそれをやりたくてかなり探したのですが見つからないです。 CLion向けに探したことはないですが、Visual Studio向けにないので無いような気がします。(CMakeのVisual Studioサポートはかなり手厚いです。) さて、CLionがびっくりするような変なこと(例えばCLion専用の別ユーザ・アカウントでデバッグ実行するなど)をやっている可能性もあると思いますが、私の場合はこのような時は何か「おバカな」ミスをしていることが多いです。思いつくのはファイル名のどれかが全角だったり大文字だったり等です。日本語ファイル名の場合はmacでビックリなことがあったので何かmacマジックにハマっている可能性もあると思います。 (iCloud DriveでWindowsとファイル共有しているのですが、濁点のある全角ファイル名のファイルをmacで保存すると、濁点が別の文字へ分離されたことがあります。)
guest

0

MacintoshないしはいずれかのLinuxディストリビューションをお使いなのだと思います。

Clionを実行しているのと同じユーザーでshell上から次のようにコマンドを入力してファイルが読み取れるか確認してみてください。ほとんどありそうもない可能性も含めると以下の3つぐらい考えられます。(case2,case3はほぼないと思いますが・・・)

bash

1$ cat /path/input.txt 2(case1) cat: /path/input.txt: No such file or directory 3(case2) cat: /path/input.txt: Permission denied 4(case3) cat: /path/input.txt: Is a directory

ご質問の内容からコンパイルエラーは発生しておらずexecutableも生成されておりプログラムの実行はできていると推測します。とすればファイルが存在しないという原因ぐらいが可能性として一番ありそうな気がしました。


余談ですが、質問の際には状況を正確に表現することが大切です。

if文でも読み込んでないと怒られます。

ではなく、

「can't read this data.」と表示される

と表現した方がよいです。状況説明の際には「質問者さんご自身の解釈」だけでなく「どういう結果になったかの事実」を明記すると、状況がより正確に読み手に伝わります。そんな点にも注意するとよいと思います。

投稿2017/12/02 06:01

KSwordOfHaste

総合スコア18394

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

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

coconuts0066

2017/12/02 06:10

ご回答ありがとうございます。 投稿したプログラムにミスがあったので修正いたしました。 input.txtは、main.cppと同じ階層にあります。 この二つがある階層でcat input.txtをかましてみましたが、内容がしっかりと表示されているんですが、CLionの方でビルドしてもcan't read this data.が表示される状況は変わりません。 質問をするときに指摘もありがとうございます。修正しておきました。
KSwordOfHaste

2017/12/02 06:19

CLionは無償版がなくアマチュアな自分は利用してませんが、推測を述べます。 相対パスを指定しているなら「このプログラムをCLionから実行した場合、作業ディレクトリーはどこになるのか」がポイントになります。main.cppがあるディレクトリーとは違うディレクトリーが作業ディレクトリーになっているのだと思います。単なる勘ですがプログラムの実行ファイル(Test)が生成されているディレクトリーなのでは?プロジェクトディレクトリーの下にoutとかbinというディレクトリーができてませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問