CLion C ++无法读取/打开项目目录中的.txt文件

时间:2015-07-18 20:33:35

标签: c++ io fstream readfile clion

我的项目目录中有一个.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之外,其他工作正常。很奇怪。

添加一些细节..............更多细节? :(

6 个答案:

答案 0 :(得分:12)

Clion查找输入文件并将输出文件写入Debug文件夹。如果您将输入文件放在那里,它将会看到它们。

答案 1 :(得分:6)

我将假设工作目录被设置为可执行文件的路径而不是CMakeLists.txt文件。

要解决此问题,请:

  1. 将.txt放在可执行文件旁边
  2. Explicitly set the working directory for debugging
  3. 输入.txt文件的完整路径,如ti7的回答中所述。

答案 2 :(得分:0)

如果inputFile.is_open()始终返回false,则inputFile.open("twoday.txt");无法正确打开文件,大概是因为它无法找到"twoday.txt"

如果您正在使用Linux,请尝试设置"c:/path/twoday.txt""/path/twoday.txt"等显式路径。你也可以尝试编写一个文件来查看它显示的位置,或者更奇怪的东西来返回当前路径。

答案 3 :(得分:0)

我发现了如何在Cion中的项目目录中设置CMake。

  1. 转到文件:设置
  2. 现在导航到构建,执行,部署部分
  3. 在构建中,您可以指定相对于项目的构建路径
  4. 我只是将我的设置为“。\ build”,现在它总是构建到我的项目中,包括你制作的文件。

答案 4 :(得分:0)

其他答案确定了问题,这与CLion无关。当任何可执行文件启动时,它具有当前工作目录。默认情况下,这是可执行文件所在的目录。如果您要阅读的文件位于其他任何地方,则必须执行以下三项操作之一:

  • 为文件使用标准路径名。如果您在运行时输入文件名,那就太痛苦了。
  • 将您的数据文件复制到可执行文件的主页。但是,当您构建发布版本而不是调试版本时,您需要再次复制它。
  • 使用CLion非常好的UI将启动时可执行文件的当前工作目录设置为不同的值,例如项目或数据文件夹。

我已经制作了一个关于如何完成最后一个的简短教程视频: https://youtu.be/dTtZEAfh_LM

答案 5 :(得分:0)

我遇到了同样的问题:

  1. 执行:Ctrl + Alt + F12获取完整的文件路径

  2. inputFile.open()

  3. 快乐编码