C ++ проблема с ifstream (), берущим имя файла из строковой переменной - PullRequest
0 голосов
/ 06 апреля 2019

У меня эта простая, но раздражающая проблема.

ifstream dataFile (fileName) работает нормально, если fileName жестко запрограммирован или назначен через строковую переменную, однако при предоставлении из аргумента он не может найти файл.

У меня есть следующий код -

//This function will get filenames from a .txt file
//Then call getDataFromFile() with filename as argument

void getFileNames(string dataFileName){

   string line;
   ifstream dataFile(dataFileName);
   if(!dataFile){
      cout << "Error! No such file found! Ending Program." << 
      endl;
      exit(0);
    }

    while(getline(dataFile,line)){
       if(!line.empty()){
           getDataFromFile(line);
       }
    }
} 

//**Issue is inside this function**

void getDataFromFile(string fileName){

   //Files are under "data/" path -
   //To access Jan.csv - "data/Jan.csv"

   string filePath = "data/Jan.csv"; //Works
   string filePath = "data/"+fileName; //Not working - Unable to find file   

   ifstream dataFile(filePath);
 //...Rest of code
}

Ниже приведено содержимое .txt файла

Jan.csv

Feb.csv

Я попытался передать строку как строку c, используя

ifstream dataFile (filePath.c_str ());

и все еще не может найти файл.

1 Ответ

0 голосов
/ 06 апреля 2019

Нашел проблему.Имя файла оканчивается на «\ r».

Для новичков c ++, таких как я, которые используют кодовый блок -

Вы можете проверить имя файла во время выполнения, установив точки останова и проверив из консоли отладчика.

1) Установите точки останова, щелкнув с левой стороны строки, которую вы хотите проверить enter image description here

2) Запустите отладчик, нажав кнопку отладки наtop "красный цвет один".

3) Проверка через консоль отладчика enter image description here

enter image description here

...