CLion C++ не может читать / открывать.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());
}
все остальное отлично работает, кроме моего файла IO. Очень странный.
добавление некоторых деталей..............более детально? :(
5 ответов
если inputFile.is_open()
всегда возвращает false
, inputFile.open("twoday.txt");
не открывает файл правильно, предположительно, потому что он не может найти "twoday.txt"
попробуйте установить явный путь, как "c:/path/twoday.txt"
или "/path/twoday.txt"
если вы используете Linux. Вы также можете попробовать написать файл, чтобы увидеть, где он появляется, или что-то более экзотическое, чтобы вернуть текущий путь.
Clion ищет входные файлы и записывает выходные файлы в папку отладки. Если вы поместите туда свои входные файлы, он их увидит.
Я собираюсь предположить, что рабочий каталог устанавливается на путь к исполняемому файлу вместо ваших CMakeLists.txt-файл.
чтобы исправить это, либо:
- поставить .txt рядом с исполняемым файлом
- явно установите рабочий каталог для отладки
- введите полный путь к файлу .txt-файл, как объяснено в ответе ti7.
Я узнал, как установить CMake для сборки в каталоге проекта в CLion.
- перейти к файлу: настройки
- Теперь перейдите к разделу построение, выполнение, развертывание
- там в разделе build вы можете указать путь сборки относительно вашего проекта
Я просто установил свой".\build", и теперь он всегда строится в мой проект, включая файл, который вы делаете.
другие ответы определить проблему, которая на самом деле не имеет ничего общего с CLion. Когда любой исполняемый файл запускается, он имеет текущий рабочий каталог. По умолчанию это каталог, в котором находится исполняемый файл. Если файл, который вы хотите прочитать, живет в другом месте, вам нужно сделать одну из трех вещей:
- используйте полное имя пути для файла. Вид боли, Если вы вводите имя файла во время выполнения.
- скопируйте файл данных в исполняемый файл жилище. Но тогда вам нужно будет скопировать его снова, когда вы создадите сборку выпуска, а не сборку отладки.
- используйте очень хороший пользовательский интерфейс CLion, чтобы установить текущий рабочий каталог исполняемого файла при запуске на другое значение, например, ваш проект или папку данных.
Я создал краткое учебное видео о том, как выполнить последнее: https://youtu.be/dTtZEAfh_LM