Вопрос о конкатенации строк пути - PullRequest
0 голосов
/ 19 мая 2010

Пожалуйста, смотрите мой код ниже.

ifstream myLibFile ("libs//%s" , line); // Compile failed here ???

Я хочу объединить строку пути и снова открыть связанный файл.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
  string line;
  ifstream myfile ("libs//Config.txt");  
  // There are several file names listed in the COnfig.txt file line by line.
  if (myfile.is_open())
  {
    while (! myfile.eof() )
    {
  getline (myfile,line);
  cout << line << endl;
  // Read details lib files based on the each line file name.
  string libFileLine;
  ifstream myLibFile ("libs//%s" , line);  // Compile failed here ???
  if (myLibFile.is_open())
  {
   while (! myLibFile.eof() )
   {
    cout<< "success\n";
   }
   myLibFile.close();
  }


    }
    myfile.close();
  }

  else cout << "Unable to open file"; 

  return 0;
}

Предположим, что мой [Config.txt] включает содержимое ниже. И все файлы * .txt, расположенные в папке libs .

file1.txt
file2.txt
file3.txt

1 Ответ

4 голосов
/ 19 мая 2010

Конструктор ifstream не работает таким образом. Его первый параметр - это строка C в файле, который вы хотите открыть. Второй параметр - необязательный набор флагов режима.

Если вы хотите объединить две строки, просто объедините две строки:

std::string myLibFileName = "libs/" + line;
ifstream myLibFile(myLibFileName.c_str());

// Or, in one line:
ifstream myLibFile(("libs/" + line).c_str());

(вызов c_str() необходим, поскольку конструктор ifstream принимает const char*, а не std::string)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...