Datei öffnen/neu erstellen
-
Hallo!
Folgende (vereinfachte) Aufgabenstellung:
Datei oeffnen. Falls Sie nicht existiert eine neue Datei anlegen.
Aus der geoeffneten Datei etwas auslesen.Problembeschreibung:
s. Kommentar im Quellcode
#include <string> #include <fstream> int main() { std::string name("test.log"); // Versuch Datei zu oeffnen std::ifstream datei; datei.open(name.c_str()); if (!datei.is_open()) { // Falls Datei nicht existiert, neu erstellen std::ofstream datei2(name.c_str()); datei2.close(); } else datei.close(); // Das hier klappt nur, wenn ich datei3 verwende. // Wenn ich datei von oben wieder benutze (s.u.), laeuft das Programm // in eine Endlosschleife. Warum? std::ifstream datei3; datei3.open(name.c_str()); if (datei3.is_open()) { std::string dateiZeile; while(!datei3.eof()) { std::getline(datei3, dateiZeile, '\n'); // ... mehr Code } datei3.close(); } /* datei.open(name.c_str()); if (datei.is_open()) { std::string dateiZeile; while(!datei.eof()) { std::getline(datei, dateiZeile, '\n'); // ... mehr Code } datei.close(); } */ }
Gruß
void*
-
Hi,
das Problem besteht nur, wenn die datei nicht vorhanden ist. Das Problem sollte bei den FLags zu finden sein, welche dann ja noch gesetzt sind (je nachdem, welcher Fehler auftrat). Zu loesen durch
[cpp]int main()
{
std::string name("test.log");// Versuch Datei zu oeffnen
std::ifstream datei;
datei.open(name.c_str());
if (!datei.is_open())
{
// Falls Datei nicht existiert, neu erstellen
std::ofstream datei2(name.c_str());
datei2 << "hallo\n";
datei2 << "blubb.";
datei2.close();
}
else
datei.close();// Das hier klappt nur, wenn ich datei3 verwende.
// Wenn ich datei von oben wieder benutze (s.u.), laeuft das Programm
// in eine Endlosschleife. Warum?
//std::ifstream datei3;
//datei3.open(name.c_str());//if (datei3.is_open())
//{
// std::string dateiZeile;
// while(!datei3.eof())
// {
// std::getline(datei3, dateiZeile, '\n');
// std::cout << dateiZeile << std::endl;
// // ... mehr Code
// }
// datei3.close();
//}datei.clear();
datei.open(name.c_str());if (datei.is_open())
{
std::string dateiZeile;
while(!datei.eof())
{
std::getline(datei, dateiZeile, '\n');
std::cout << dateiZeile << std::endl;// ... mehr Code
}
datei.close();
}std::cin.get();[/cpp]
So geht es bei mir.
Gruss,
DeSoVoDaMu
-
Hallo,
besten Dank! Funktioniert und ist deutlich eleganter.
Gruß
void*
-
Geht das mit dem öffnen (falls nicht vorhanden neue datei erstellen) nicht einfach mit:
datei.open("blablabla.dat");
Jannik