Проблема C с ifstream(), берущей имя файла из строковой переменной

#c #string #ifstream

#c #строка #ifstream

Вопрос:

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

файл данных ifstream(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(filePath.c_str());

и все еще не удается найти файл.

Комментарии:

1. Если вы проверяете имя файла во время выполнения, содержит ли оно правильное имя (без недопустимых символов)?

2. Очень вероятно, что есть завершающие новые строки.

3. Являются ли окончания строк в файле .txt правильными для вашей платформы?

4. Спасибо, ребята. Имя файла заканчивается на » r». Обнаружена проблема.

Ответ №1:

Обнаружена проблема. Имя файла заканчивается на » r».

Для новичков c , таких как я, которые используют codeblock —

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

1) Установите точки останова, щелкнув в левой части строки, которую вы хотите проверить введите описание изображения здесь

2) Запустите отладчик, нажав кнопку отладки вверху «красного цвета».

3) Проверьте через консоль отладчика введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. И знаете ли вы, откуда это 'r' взялось? (Новые строки Windows r n.) И знаете ли вы, как решить это 'r' , застряв в конце строки? (Открытие текстового файла в текстовом режиме в Windows.)