it-swarm.com.de

CLion C++ kann die TXT-Datei im Projektverzeichnis nicht lesen/öffnen

Ich habe eine TXT-Datei in meinem Projektverzeichnis, die ich erstellt und mit Daten gefüllt habe.

die Verzeichnisstruktur sieht folgendermaßen aus:

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

hier ist mein code:

#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());
}

Alles andere funktioniert gut, abgesehen von meiner IO-Datei. Sehr eigenartig.

hinzufügen einiger Details :(

9
Rekumaru

wenn inputFile.is_open() immer false zurückgibt, öffnet inputFile.open("twoday.txt"); die Datei nicht korrekt, vermutlich weil "twoday.txt" nicht gefunden werden kann.

Legen Sie einen expliziten Pfad wie "c:/path/twoday.txt" oder "/path/twoday.txt" fest, wenn Sie Linux verwenden. Sie können auch versuchen, eine Datei zu schreiben, um zu sehen, wo sie angezeigt wird, oder etwas Exotischeres, um den aktuellen Pfad zurückzugeben.

0
ti7

Clion sucht nach Eingabedateien und schreibt die Ausgabedateien in den Debug-Ordner. Wenn Sie Ihre Eingabedateien dort ablegen, werden sie angezeigt.

12

Ich gehe davon aus, dass das Arbeitsverzeichnis auf den Pfad zur ausführbaren Datei anstatt auf die Datei CMakeLists.txt gesetzt wird. 

Um dies zu beheben, entweder

  1. legen Sie die TXT-Datei neben die ausführbare Datei
  2. Das Arbeitsverzeichnis explizit für das Debugging festlegen
  3. Geben Sie den vollständigen Pfad zur TXT-Datei ein, wie in der Antwort von ti7 erläutert.
5
Russell Greene

Die anderen Antworten identifizieren das Problem, das wirklich nichts mit CLion zu tun hat. Wenn eine ausführbare Datei gestartet wird, verfügt sie über ein aktuelles Arbeitsverzeichnis. Standardmäßig ist dies das Verzeichnis, in dem sich die ausführbare Datei befindet. Wenn die Datei, die Sie lesen möchten, an einem anderen Ort lebt, müssen Sie eine der folgenden drei Aktionen ausführen:

  • Verwenden Sie einen vollständig qualifizierten Pfadnamen für Ihre Datei. Etwas schmerzhaft, wenn Sie zur Laufzeit den Dateinamen eingeben.
  • Kopieren Sie Ihre Datendatei auf die Startseite der ausführbaren Datei. Dann müssen Sie es jedoch erneut kopieren, wenn Sie den Release-Build und nicht den Debug-Build erstellen.
  • Verwenden Sie die sehr schöne Benutzeroberfläche von CLion, um das aktuelle Arbeitsverzeichnis der ausführbaren Datei beim Start auf einen anderen Wert festzulegen, z. B. für Ihr Projekt oder Ihren Datenordner.

Ich habe ein kurzes Tutorial-Video erstellt, wie Sie das Letzte erreichen können: https://youtu.be/dTtZEAfh_LM

0
Anne Gunn

Ich habe herausgefunden, wie Sie CMake so einrichten, dass es Ihr Projektverzeichnis in CLion erstellt.

  1. Gehe zu Datei: Einstellungen
  2. Navigieren Sie nun zum Abschnitt zum Erstellen, Ausführen und Bereitstellen
  3. Dort können Sie den Build-Pfad relativ zu Ihrem Projekt angeben

Ich habe nur ".\Build" eingestellt und jetzt wird es immer in mein Projekt eingefügt, einschließlich der von Ihnen erstellten Datei.

0
Ben Rasmussen

Clion arrangiert ein c/c ++ Projekt via cmake. Mein Betriebssystem ist Windows 10. Die von cmake generierte ausführbare Datei befindet sich in cmake-build-debug. Sie können den absoluten Pfad oder "../" verwenden.

0
amon hao