CLion С++ не может читать/открывать файл .txt в каталоге проекта

У меня есть .txt файл в моем каталоге проектов, который я создал и заполнял данными.

Структура каталога

выглядит следующим образом:

/Users/asd/ClionProjects/ProjectWithTemplates/
main.cpp
cmake
twoday.txt

вот мой код:

#include <iostream>
#include <array>
#include <cmath>
#include <fstream>


using namespace std;

/* print array prototype */
template <size_t N>
void printArray(const array<double , N> & arr);

/* mean function prototype */
template <size_t N>
double meanArray(const array<double , N> & arr);

/* standard deviation prototype */
template <size_t N>
double sDeviation(const array<double , N> & arr);

int main() {

    string date1;
    string date2;

    array<double, 24> day1Temps;
    array<double, 24> day2Temps;
    array<double, 3> testarr = {75,70,65};

/* TESTING PURPOSES */
    printArray(testarr);
    sDeviation(testarr);
    cout << "standard deviation of array is: " << sDeviation(testarr) << endl;
    cout << "mean of array is: " << meanArray(testarr) << endl;
/* END TESTING */

    ifstream inputFile;
    inputFile.open("twoday.txt");

    if(inputFile.is_open())
    {
        inputFile >> date1;
        inputFile >> date2;

        for(int i = 1; i < day1Temps.size(); ++i)
        {
            inputFile >> day1Temps[i];
        }

        for (int j = 1; j < day2Temps.size(); ++j) {
            inputFile >> day2Temps[j];
        }
    } else cout << "File unable to open. File does not exist." << endl;


    return 0;
}

/* print array defination */
template <size_t N>
void printArray(const array<double , N> & arr){

    for(const auto & i : arr)
    {
        cout << i << " ";
    }
    cout << endl;
}

/* mean function defination */
template <size_t N>
double meanArray(const array<double , N> & arr){

    double sum;

    for (const auto & i : arr) {
        sum+=i;
    }

    return sum/arr.size();
}

/* standard deviation defination */
template <size_t N>
double sDeviation(const array<double , N> & arr){

    double mean = meanArray(arr);
    double total;

    for (const auto & i : arr){
        total+=pow(i - mean, 2);
    }
    return sqrt(total/arr.size());
}

Eveything еще отлично работает, кроме моего файла IO. Очень странно.

добавление некоторых деталей.............. более подробная информация?: (

Ответ 1

если inputFile.is_open() всегда возвращает false, inputFile.open("twoday.txt"); не открывает файл правильно, по-видимому, потому что он не может найти "twoday.txt"

Попробуйте установить явный путь, например "c:/path/twoday.txt" или "/path/twoday.txt", если вы используете Linux. Вы также можете попробовать написать файл, чтобы увидеть, где он появляется, или что-то более экзотическое, чтобы вернуть текущий путь.

Ответ 2

Clion ищет входные файлы и записывает выходные файлы в папку Debug. Если вы поместите свои входные файлы там, они увидят их.

Ответ 3

Я предполагаю, что рабочий каталог устанавливается на путь к исполняемому файлу вместо файла CMakeLists.txt.

Чтобы исправить это, EITHER:

Ответ 4

Другие ответы определяют проблему, которая не имеет никакого отношения к CLION. Когда запускается какой-либо исполняемый файл, он имеет текущий рабочий каталог. По умолчанию это каталог, в котором работает исполняемый файл. Если файл, который вы хотите читать, живет где-то еще, вам нужно сделать одну из трех вещей:

  • Используйте полный путь к файлу. Вид боли, если вы печатаете имя файла во время выполнения.
  • Скопируйте файл данных в исполняемый файл. Но тогда вам нужно будет скопировать его снова, когда вы создадите сборку выпуска, а не сборку отладки.
  • Используйте CLI очень приятный интерфейс, чтобы установить исполняемый текущий рабочий каталог при запуске на другое значение, например, ваш проект или папку с данными.

Я создал краткое учебное видео о том, как выполнить последнее: https://youtu.be/dTtZEAfh_LM

Ответ 5

Я узнал, как установить CMake для создания в вашем каталоге проектов в CLion.

  • Перейти к файлу: Настройки
  • Теперь перейдите к разделу сборки, выполнения, развертывания.
  • В рамках сборки вы можете указать путь сборки относительно вашего проекта.

Я просто установил мой ".\build", и теперь он всегда встраивается в мой проект, включая файл, который вы делаете.

Ответ 6

Clion организует c/c++ проект через cmake. Моя ОС - Windows 10. Исполняемый файл, сгенерированный cmake, находится в cmake-build-debug. Вы можете использовать абсолютный путь или "../".