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

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

ただいまの
回答率

91.35%

  • C++

    2416questions

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

  • IDE

    84questions

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

  • CMake

    38questions

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

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

受付中

回答 2

投稿 2017/12/02 12:51 ・編集 2017/12/02 16:24

  • 評価
  • クリップ 0
  • VIEW 77

coconuts0066

score 0

前提・実現したいこと

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

cmake_minimum_required(VERSION 3.8)
project(Test)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)
add_executable(Test ${SOURCE_FILES})
#include <iostream>
#include <fstream>
#include <string>


using namespace std;

int main() {




    ifstream input("input.txt");
    string str;

    if(!input) cout << "can't read this data.";

    while(getline(input, str)){
    cout << str << endl;
    }

    return 0;
}


input.txtの中身です。

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

試したこと

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

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

言語:C++
IDE:CLion

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+2

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

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

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

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


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

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

ではなく、

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

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

投稿 2017/12/02 15:01

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/12/02 15:10

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

    質問をするときに指摘もありがとうございます。修正しておきました。

    キャンセル

  • 2017/12/02 15:19

    CLionは無償版がなくアマチュアな自分は利用してませんが、推測を述べます。

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

    キャンセル

+2

こんにちは。

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

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

投稿 2017/12/02 15:17

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/12/02 15:24

    ご回答ありがとうございます!投稿にミスがあり、path/input.txtではなくinput.txtのみで良かったところ間違えたプログラムのソースを貼ってしまったので修正いたしました。(main.cppとinput.txtは同じ階層にあります。)

    ご回答いただいたようにホームディレクトリの方にもinput.txtを移動して~(チルダ)をつけて試してみましたがうまくいきませんでした。

    CLionの方では、input.txtが灰色になっている(main.cppなどは黒くなっている)状態なのです。CLionの方でinput.txtを読み込んでいないのかなとも考えられます。

    キャンセル

  • 2017/12/02 16:02

    ホームにinput.txtを置いて"~/input.txt"でアクセスできないのは不思議ですね。
    この指定ならば開発環境の影響は受けないはずです。

    main.cppがある場所と、それをコンパイルしたアプリを走らせる場所の間に直接の関係はありません。
    コマンドラインで gcc を直接叩いたような時は全てカレントにできますが、多少なりと高度な開発ツール(CLionもその一つ)を使っているケースでは大抵ソースとは別の場所にアプリが生成されます。

    そして、そのアプリのカレント・フォルダは、起動方法によって異なります。CLionを使って起動されていると思いますが、私はCLionを使ったことはないので把握していません。すいません。

    ないとは思いますが、もしかしてWindowsですか?
    この辺りは OS によっても振る舞いが異なりますので OS が何かも記載されたほうがよいです。
    (OSと開発環境はセットで書くとおぼえておいた方が良いかも。)

    キャンセル

  • 2017/12/02 16:30

    ご返信ありがとうございます。ホームにて動かないのは私も不思議でなりません。通常、g++でターミナルにてコンパイルを行うと期待通りの動きをしてくれるのですが、CLionでのビルドではうまくいかないのが大きな謎です。

    CMakeの方での、何か指定でどうにかなる問題なのでしょうか?CMakeの方は全くの初心者で右も左も分からない状態です。

    使用OSへのご指摘ありがとうございます。修正しておきました。使用OSはmacOS 10.12.6です。

    キャンセル

  • 2017/12/02 18:41

    CMakeはかなり使い込んでいるのですが、IDEのデバッグ実行時のカレント・フォルダ、起動パラメータ、環境変数等を設定する方法は見つかりませんでした。私はVisual Studioでそれをやりたくてかなり探したのですが見つからないです。
    CLion向けに探したことはないですが、Visual Studio向けにないので無いような気がします。(CMakeのVisual Studioサポートはかなり手厚いです。)

    さて、CLionがびっくりするような変なこと(例えばCLion専用の別ユーザ・アカウントでデバッグ実行するなど)をやっている可能性もあると思いますが、私の場合はこのような時は何か「おバカな」ミスをしていることが多いです。思いつくのはファイル名のどれかが全角だったり大文字だったり等です。日本語ファイル名の場合はmacでビックリなことがあったので何かmacマジックにハマっている可能性もあると思います。
    (iCloud DriveでWindowsとファイル共有しているのですが、濁点のある全角ファイル名のファイルをmacで保存すると、濁点が別の文字へ分離されたことがあります。)

    キャンセル

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

ただいまの回答率

91.35%

関連した質問

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

  • C++

    2416questions

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

  • IDE

    84questions

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

  • CMake

    38questions

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