1

I'm trying to read multiple files in a folder so I can parse through their data. I first try to fill the list using a text document with all the file names in it, then based on that vector of string, continuously call ifstream so I can read every file and process the word data.

The problem I'm running into is that ifstream is failing to open all of the files, except one in the middle of the list?
Heres the output, its failing to read the dbfiles but they all have the right names?

These files aren't more than 8GB a piece so it should be able to handle it but it's not? maybe theres a problem with the file paths?

 std::ifstream dbfiles(argv[1]);
    if (!dbfiles)
    {
        std::cerr << "Failed to open database " << argv[1] << " for reading." << std::endl;
    }


    std::string word;
    std::vector<std::string> dbfile_names;
    std::string file_name;

    while (getline(dbfiles, file_name))
    { //reading in the file names
        dbfile_names.push_back(file_name);
    }//populate list of dbs

    dbfiles.close();

    for (unsigned int j = 0; j < dbfile_names.size(); j++)
    { //for every single file

    std::ifstream dbfile(dbfile_names[j].c_str());
    if (!dbfile)
    {
        std::cout << "Failed to open database file" <<  dbfile_names[j] << " for reading. READ FAILURE" << std::endl;
    }else{
        std::cout << "currently reading " << dbfile_names[j] << std::endl;
    }

        while (dbfile >> word)
        { 
           //do stuff with the segments of data
           //here I gather the data word by word and process it
        }
        dbfile.close();
   }

1 Answers1

0

I went into my debugger and found that due to getline, all the file names had a /r at the back of them. The post over here Getting std :: ifstream to handle LF, CR, and CRLF?, helped describe the problem and how to easily fix it.

My files are now reading accordingly