2015-07-18 36 views
7

Mam plik .txt w katalogu projektu, który utworzyłem i wypełniono danymi.Program CLion C++ nie może odczytać/otworzyć pliku .txt w katalogu projektu

struktura katalogów wygląda następująco:

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

tutaj jest mój kod:

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

Wszystko dla jeszcze działa dobrze oprócz mojego pliku IO. Bardzo dziwny.

dodanie niektórych szczegółów .............. więcej szczegółów? :(

+0

sądzę, aby rozwiązać problem trzeba będzie wysłać nam swoją strukturę plików ... –

+0

Może IDE ustawia inny katalog roboczy. –

+0

Obecnie szukam tego. wszystko, co widziałem, mówi, że znajduje się w katalogu projektu. – Rekumaru

Odpowiedz

0

jeśli inputFile.is_open() zawsze zwraca false, inputFile.open("twoday.txt"); nie otwiera plik poprawnie, przypuszczalnie dlatego, że nie może znaleźć "twoday.txt"

Spróbuj ustawić wyraźną ścieżkę jak "c:/path/twoday.txt" lub "/path/twoday.txt" jeśli używasz Linuksa. Mogłabyś spróbuj też napisać plik, aby zobaczyć, gdzie się pojawi, lub coś bardziej egzotycznego, aby zwrócić bieżącą ścieżkę.

+0

Spróbuję napisać do pliku. – Rekumaru

+0

to dokładnie to, co się dzieje. Ponieważ masz pierwszą odpowiedź, dam ci to. Dzięki – Rekumaru

2

Zakładam, że katalog roboczy jest ustawiony na ścieżkę do pliku wykonywalnego zamiast do pliku Plik CMakeLists.txt.

Aby rozwiązać ten problem, albo:

  1. umieścić .txt obok pliku wykonywalnego
  2. Explicitly set the working directory for debugging
  3. Wprowadź pełną ścieżkę do pliku .txt jak wyjaśniono w odpowiedzi ti7 użytkownika.
0

Dowiedziałem się, jak ustawić CMake do budowania w katalogu projektu w CLion.

  1. Przejdź do pliku: Ustawienia
  2. Teraz przejdź do budowy, wykonanie sekcji Wdrażanie
  3. Istnieje ramach budowy można określić Build Path stosunku do projektu

po prostu ustawić kopalni ". \ build" i teraz zawsze jest wbudowany w mój projekt, łącznie z plikiem, który tworzysz.

2

Clion szuka plików wejściowych i zapisuje pliki wyjściowe do folderu debugowania. Jeśli umieścisz tam pliki wejściowe, zobaczy je.

+0

Tak to rozwiązało mój problem, dziękuję !!!!! –

0

Inne odpowiedzi identyfikują problem, który tak naprawdę nie ma nic wspólnego z CLion. Kiedy uruchamiany jest dowolny plik wykonywalny, ma aktualny katalog roboczy. Domyślnie jest to katalog, w którym znajduje się plik wykonywalny. Jeśli plik, który chcesz przeczytać, znajduje się w innym miejscu, musisz wykonać jedną z trzech czynności:

  • Użyj pełnej ścieżki do pliku. Coś w rodzaju bólu, jeśli wpisujesz nazwę pliku w czasie wykonywania.
  • Skopiuj plik z danymi do domu wykonawczego. Ale wtedy będziesz musiał skopiować go ponownie, gdy skompilujesz kompilację wydania, a nie kompilację debugowania.
  • Użyj bardzo miłego interfejsu użytkownika CLion, aby ustawić bieżący katalog roboczy przy uruchamianiu na inną wartość, na przykład folder projektu lub folderu danych.

stworzyłem krótki samouczek wideo o tym, jak wykonać ostatni: https://youtu.be/dTtZEAfh_LM