2017-02-02 5 views
0

Ich versuche, den Inhalt mehrerer Dateien mit der Boost-Bibliothek zu lesen. Ich habe es gelungen, alle Dateien in einem Ordner zur Liste, aber ich stecke zu versuchen, sie zu lesen ...Mehrere Dateien lesen C++ mit Boost

#include <iostream> 
#include "boost/filesystem.hpp" 

using namespace std; 
using namespace boost::filesystem; 

int main(int argc, char* argv[]) 
{ 
    // list all files in current directory. 
    // You could put any file path in here, e.g. "/home/me/mwah" to list that 
    // directory 
    path p("/home/baptiste/Bureau"); 

    directory_iterator end_itr; 

    // cycle through the directory 
    for (directory_iterator itr(p); itr != end_itr; ++itr) 
    { 
     // If it's not a directory, list it. If you want to list directories too, 
     // just remove this check. 
     if (is_regular_file(itr->path())) 
     { 
      // assign current file name to current_file and echo it out to the 
      // console. 
      string current_file = itr->path().string(); 
      cout << current_file << endl; 
     } 
    } 
} 
+0

Suche nach 'fstream' und es ist Herleitungen (Datei-Streams) ... – Nim

Antwort

2

ein ifstream Verwenden Sie die Datei zu öffnen, und getline() seinen Inhalt in eine string Zeile zu lesen, indem Zeile:

#include <fstream> 
#include <string> 

std::string line; 
std::ifstream ifs(itr->path().string().c_str()); 
if (ifs) { 
    while (std::getline(ifs, line)) { 
     // Process line 
    } 
} 
else { 
    std::cerr << "Couldn't open " << itr->path().string() << " for reading\n"; 
} 
1

Sie können die C++ - Standardbibliothek zum Lesen der Datei verwenden.

Die einfachste Möglichkeit, eine Datei Zeile-für-Zeile zu lesen, so etwas wie

#include <fstream> 
#include <string> 

// ... and put this inside your loop: 

if (std::ifstream inFile(current_file.c_str())) { 
    std::string line; 
    while (std::getline(inFile, line)) { 
     // Process line 
    } 
} 
+0

aber es lesen nur eine Datei hier .... – Boat

+0

@BaptBnnt Möchten Sie öffnen möchten, und mehrere Dateien lesen gleichzeitig statt sequentiell? Oder sogar parallel? – jotik

+0

@BaptBnnt, dies ist ein Beispiel. Sie würden Code wie diesen innerhalb Ihrer Schleife über 'directory_iterator' setzen, um jede Datei der Reihe nach zu lesen. –

0

Für diejenigen, die den gesamten Code wollen würde.

#include <iostream> 
#include "boost/filesystem.hpp" 
#include <fstream> 
#include <string> 


using namespace std; 
using namespace boost::filesystem; 

int main (int argc, char *argv[]) 
{ 

path p ("/home/baptiste/workspace/booost"); 

directory_iterator end_itr; 


for (directory_iterator itr(p); itr != end_itr; ++itr) 
{ 

    if (is_regular_file(itr->path())) { 

     string current_file = itr->path().string(); 
     cout << current_file << endl; } 

          std::string line; 
          std::ifstream ifs(itr->path().string().c_str()); 
          if (ifs) { 
          while (std::getline(ifs, line)) { 
         cout<< line; 
        } 
    } 
    else { 
     std::cerr << "Couldn't open " << itr->path().string() << " for reading\n"; 
    } 

} 

}