C ++问题,ifstream()从字符串变量

时间:2019-04-06 16:14:46

标签: c++ string ifstream

我遇到了一个简单而烦人的问题。

如果文件名是硬编码或通过字符串变量分配的,则 ifstream dataFile(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 :(得分:0)

发现了问题。 文件名以“ \ r”结尾。

对于像我这样使用Codeblock的C ++新手-

您可以在运行时通过设置断点来检查文件名,并从调试器控制台中进行检查。

1)通过单击要检查的行的左侧来设置断点 enter image description here

2)通过单击“红色一个”顶部的调试按钮来运行调试器。

3)通过调试器控制台进行检查 enter image description here

enter image description here