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


Anmelden zum Antworten