Am Ende einer Simulation möchte ich einige Ergebnisse als eine angehängte Zeile in eine Datendatei schreiben. Der Code, den ich verwende, ist der folgende, in dem angenommen werden kann, dass outFile
korrekt als std::ofstream
zugewiesen wurde, dass output_file
ein std::string
ist, der einen gültigen Pfad zu einer Datei enthält, die noch nicht existiert, und dass die Variablen in der Datei ausgedruckt werden nur int
Typen, die Werte während der Simulation erhalten.Verwendung von `ofstream` scheint weder zu erstellen noch in Datei zu schreiben
outFile.open(output_file.c_str(), std::ios::out | std::ios::app);
outFile << num_nodes << ", " << tot_s << ", " << tot_c << ", " << tot_d << std::endl;
outFile.close();
Ich habe überprüft, ob es richtig die Datei mit der ofstream::is_open()
Funktion öffnet und es kehrt false
. Ich kann jedoch nicht herausfinden warum. Ich habe es mit vielen verschiedenen Dateinamen und Verzeichniswegen versucht, die ich überprüft habe und sie sind gültig (keine Tippfehler, etc.)
Die Datei, die geschrieben wird, ist gerade in einen Ordner auf dem Schreibtisch, den ich erstelle Dateien die ganze Zeit, so sehe ich nicht, wie es ein Berechtigungsproblem sein könnte. Wenn es ein Berechtigungsproblem war, wie kann ich das überprüfen?
Sonst kann was sonst verhindern, dass es in die Datei schreibt?
Hinzugefügt:
Im Anschluss an den Kommentaren nach oben, nach einem Aufruf perror()
Hinzufügen es die „Keine solche Datei oder das Verzeichnis“ Fehler anzeigt. Der Dateipfad in Frage:
/home/ely/Desktop/Evolutionary_Dynamics/GamesOnCycle/data/test.data
ich diese Datei erstellt werden soll, und alle Verzeichnisse in diesem Pfad existieren, es ist alles richtig geschrieben, usw., und es gibt keine seltsamen Berechtigungsprobleme mit dem GamesOnCycle Ordner oder sein Datenunterordner. Beachten Sie, dass es sich um ein Linux-System handelt (Ubuntu 11.04), so dass die Schrägstriche für den Dateipfad korrekt sind, es sei denn, ich verpasse etwas, das C++ in w.r.t. Dateipfade.
obwohl perror() zu sehen ist, dass Sie c Stil es noch nach ofstream.open verwenden, um die Fehlermeldung zu erhalten. – keety
Sind Sie sicher, dass die Pfade doppelte Backslashes verwenden? – chris
Es ist auf einem Linux-System, so dass die Pfade alle Schrägstriche haben. Es druckt den Dateinamen korrekt aus, wenn er von Benutzereingaben eingelesen wird, also hat er zumindest den richtigen Pfad in der 'std :: string'. – ely