2013-07-12 2 views
0

Мне нужно записать значения переменных в постоянный файл. Каждая операция записи должна добавить одну новую строку в тот же файл, и этот файл будет иметь миллионы строк данных из миллионов операций записи. Код, который я написал ниже, действительно записывает в файл, но проблема в том, что он переписывает одну и ту же строку снова и снова. Кроме того, я не уверен, правильно ли я ушел от конца строки, потому что он еще не выводит несколько строк. Может ли кто-нибудь показать мне, как изменить приведенный ниже код, чтобы он записывал столько строк данных, сколько ему нужно написать?с использованием stringstream и потока для записи длинного файла журнала

#include <sstream> 
#include <string> 

void writeToFile(std::stringstream& ss){ 
    using namespace std; 
    string myString = ss.str(); 
    ofstream myfile; 
    myfile.open ("somefile.txt"); 
    myfile << myString; 
    myfile.close(); 
} 

void anotherFunction(){  
    using namespace std; 
    stringstream mySS; 
    mySS << someVar; mySS << ", "; mySS << var2; 
    mySS << ", "; mySS << something; mySS << ", "; mySS << somethingelse; mySS << ", "; 
    mySS << dayofweek; mySS << ", "; mySS << time; mySS << ", "; 
    mySS << whichbone; mySS << ", "; mySS << name; mySS << "\n" << endl; 
    writeToFile(mySS); 
} 

void aThirdFunction(){ 
    using namespace std;  
    stringstream mySS;  
    mySS << someVar; mySS << ", "; mySS << var2;  
    mySS << ", "; mySS << var3; mySS << ", "; mySS << fourthVar; mySS << ", ";  
    mySS << fifthVar; mySS << ", "; mySS << sixthVar; mySS << "\n" << endl;  
    writeToFile(mySS);  
}  

ответ

2

Вам необходимо открыть выходной файл для добавления: myfile.open ("somefile.txt", ios_base::app);
В противном случае он обрезается до 0 длины каждый раз, когда ваш открыть его.

+0

+1 и кредит за ответ за удар ногтем по голове. Это работает сейчас. Впечатляющее время отклика. Единственное, что ваш ответ не включает, это то, что «\ n» стало излишним и добавляло пустую строку после добавления исправления. – CodeMed

Смежные вопросы