2016-03-26 8 views
0

Ich versuche, eine Funktion zu machen, die ein Array 'inputLayer []' nimmt und jedes Element im Array in einzelnen Dateien speichert. Wenn die Funktion das erste Mal aufgerufen wird, sollte sie die Dateien erstellen und die folgenden Male, wenn sie aufgerufen wird, sollten sie die neuen Elemente in inputLayer an das Ende der Datei anhängen.C++ Warum wird die Datei nicht angehängt oder überschrieben?

Wenn ich wiederholt eine einzelne Variable in einer einzigen Datei speichern möchte ich etwas wie folgt verwenden:

fstream recordFile; 
recordFile.open ("inputRecord.txt", fstream::in | fstream::out | fstream::app); 
recordFile << inputLayer[0] << endl; 

In der Vergangenheit, die für mich gearbeitet hat, aber jetzt habe ich viele Variablen, die Ich mag würde zu schreibe in einzelne Dateien namens "input_0_record.txt", "input_1_record.txt", ect.

Im folgenden Code verwende ich stringstream, um die Dateinamen zu erstellen, und dann verwende ich die gleiche Methode wie oben, um die Variablen in ihre Dateien zu schreiben.

int recordInputVariables(double inputLayer[]) 
{ 
    for(int i = 0; i < inputLayerSize; i ++) 
    { 
     stringstream ss; 
     ss << i; 
     string inputNumberString = ss.str(); 
     string recordFileName = "input_"; 
     recordFileName.append(inputNumberString); 
     recordFileName.append("_record.txt"); 
     fstream inputRecordFile(recordFileName.c_str()); 

     inputRecordFile.open (recordFileName, fstream::in | fstream::out | fstream::app); 
     inputRecordFile << inputLayer[i] << endl; 
     inputRecordFile.close(); 

    } 

    return 0; 
} 

Allerdings, wenn ich diese die Datei ausgeführt wird, erstellt und die Variable in die Datei zum ersten Mal geschrieben wird die Funktion aufgerufen wird, aber die Folgezeit die Funktion dort genannt wird, sind keine neuen Variablen auf die Dateien geschrieben .

Ich bin mir fast sicher, dass es ein Problem mit der Art ist, wie ich die Datei öffne. Kann jemand erkennen, was ich falsch gemacht habe?

+0

Wenn Sie C++ 98 verwenden. http://stackoverflow.com/a/22339739/4077900 – anukul

+0

Sicherlich gilt dies auch für Ihren ursprünglichen Code. Hast du es getestet? –

Antwort

2
inputRecordFile.open (recordFileName, fstream::out | fstream::app); 

Verwenden Sie in diesem Zusammenhang nicht fstream::in.

+0

Danke, ich habe es gelöst, dazu meine Codezeile: fstream inputRecordFile (recordFileName.c_str()); sollte gerade gewesen sein: fstream inputRecordFile; – Hugh

1

können Sie gleiche Problem Code wie:

int recordInputVariables(double inputLayer[]) 
{ 
    for(int i = 0; i < 5; i ++) 
    { 
     stringstream ss; 
     ss << i; 
     string inputNumberString = ss.str(); 
     string recordFileName = "input_"; 
     recordFileName.append(inputNumberString); 
     recordFileName.append("_record.txt"); 
     cout << recordFileName << endl; 
     ofstream inputRecordFile(recordFileName.c_str()); 

     // Here you have opened file by using constructor(above) so don't 
     // need to open it again as below 
     // inputRecordFile.open (recordFileName, ofstream::out); 
     inputRecordFile << inputLayer[i] << endl; 
     inputRecordFile.close(); 
     cout << "loop" << endl; 
    } 
    return 0; 
} 

Jetzt führen Sie diesen Code und alles wird, wie Sie gewünscht ...

Verwandte Themen