abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 18:11 | Nová verze

    Yocto Project byl vydán ve verzi 5.0. Její kódové jméno je Scarthgap. Yocto Project usnadňuje vývoj vestavěných (embedded) linuxových systémů na míru konkrétním zařízením. Cílem projektu je nabídnou vývojářům vše potřebné. Jedná se o projekt Linux Foundation.

    Ladislav Hagara | Komentářů: 0
    dnes 17:56 | Nová verze

    Operační systém 9front, fork operačního systému Plan 9, byl vydán v nové verzi "do not install" (pdf). Více o 9front v FQA.

    Ladislav Hagara | Komentářů: 0
    dnes 13:11 | Nová verze

    Svobodná webová platforma pro sdílení a přehrávání videí PeerTube (Wikipedie) byla vydána v nové verzi 6.1. Přehled novinek i s náhledy v oficiálním oznámení a na GitHubu. Řešeny jsou také 2 bezpečnostní chyby.

    Ladislav Hagara | Komentářů: 1
    dnes 12:33 | Zajímavý software

    Lennart Poettering na Mastodonu představil utilitu run0. Jedná se o alternativu k příkazu sudo založenou na systemd. Bude součástí systemd verze 256.

    Ladislav Hagara | Komentářů: 11
    včera 23:22 | Nová verze

    Hudební přehrávač Amarok byl vydán v nové major verzi 3.0 postavené na Qt5/KDE Frameworks 5. Předchozí verze 2.9.0 vyšla před 6 lety a byla postavená na Qt4. Portace Amaroku na Qt6/KDE Frameworks 6 by měla začít v následujících měsících.

    Ladislav Hagara | Komentářů: 10
    včera 21:44 | Komunita

    Ubuntu 24.10 bude Oracular Oriole (věštecká žluva).

    Ladislav Hagara | Komentářů: 11
    včera 20:22 | Nová verze

    Byla vydána nová verze 2.45.0 distribuovaného systému správy verzí Git. Přispělo 96 vývojářů, z toho 38 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání. Vypíchnout lze počáteční podporu repozitářů, ve kterých lze používat SHA-1 i SHA-256.

    Ladislav Hagara | Komentářů: 0
    včera 13:33 | IT novinky

    Před 25 lety, ve čtvrtek 29. dubna 1999, byla spuštěna služba "Úschovna".

    Ladislav Hagara | Komentářů: 0
    včera 01:00 | Nová verze

    Byla vydána nová verze 24.04.28 s kódovým názvem Time After Time svobodného multiplatformního video editoru Shotcut (Wikipedie) a nová verze 7.24.0 souvisejícího frameworku MLT Multimedia Framework. Nejnovější Shotcut je vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.

    Ladislav Hagara | Komentářů: 0
    28.4. 16:33 | Nová verze Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (75%)
     (8%)
     (2%)
     (15%)
    Celkem 885 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: C++ a fstream

    lobodpav avatar 16.5.2005 21:01 lobodpav | skóre: 8 | Ostrava
    C++ a fstream
    Přečteno: 2378×
    Zdravím. Mám drobný problém, se kterým si nevím rady. Potřebuji otevřít soubor pro čtení i pro zápis a pokud neexistuje, tak jej vytvořit. Kód v příloze by to měl provést, ale soubor pouze vytvoří a nic do něj nezapíše...
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main() {
      // otevreni pro cteni i zapis
      fstream *dbFile = new fstream("file.txt", ios::in | ios::out | ios::binary);
      if (!dbFile->is_open()) { // soubor nelze otevrit
        cout << "Creating file" << endl;
        dbFile->open("file.txt", ios::out | ios::binary); // vytvoreni souboru
        if (!dbFile->is_open()) {
          cout << "Cannot create file" << endl;
          return 0;
        }
        dbFile->close();
        // otevreni pro cteni i zapis
        dbFile->open("file.txt", ios::in | ios::out | ios::binary);
        if (!dbFile->is_open()) {
          cout << "Cannot open file after create" << endl;
          return 0;
        }
        if (!dbFile->write("AABB", 4))
          cout << "Cannot write to file" << endl;
        dbFile->close();
      }
      else
        cout << "Opening file" << endl;
      delete dbFile;
      return 0;
    }
    

    Odpovědi

    16.5.2005 22:21 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
    Rozbalit Rozbalit vše Re: C++ a fstream
    Je potřeba zavolat dbFile->clear(), jinak po chybě odmítá spolupracovat. Taky to jde o něco zjednodušit.
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
      // jako fopen(..., "r+") => O_RDRW
      fstream *dbFile = new fstream("file.txt", ios::in | ios::out);
      if (!*dbFile) {
        dbFile->clear();
        // jako fopen(..., "w+") => O_RDRW | O_TRUNC | O_CREAT
        dbFile->open("file.txt", ios::in | ios::out | ios::trunc);
      }
      if (!*dbFile) {
        perror("file.txt");
        return 1;
      }
      if (!dbFile->write("AAXB", 4)) {
        perror("writing to file.txt");
        return 1;
      }
      dbFile->close();
      delete dbFile;
      return 0;
    }
    
    lobodpav avatar 17.5.2005 06:11 lobodpav | skóre: 8 | Ostrava
    Rozbalit Rozbalit vše Re: C++ a fstream
    Díky!!! O tom clear jsem se nikde nedočetl. Za ta zjednodušení taky díky.
    Když už jsme u C++, nevíte, zda se nedá sehnat nějaká dokumentace, jakou má např. Java API?? Nikde jsem nic podobného nenašel a dokumentace linuxu neobsahuje nic kolem C++ ...
    17.5.2005 07:33 rastos | skóre: 62 | blog: rastos
    Rozbalit Rozbalit vše Re: C++ a fstream
    Hladas nieco taketo, taketo alebo taketo?
    lobodpav avatar 17.5.2005 08:06 lobodpav | skóre: 8 | Ostrava
    Rozbalit Rozbalit vše Re: C++ a fstream
    Ano. To jsou good odkazy :-)
    Díky!
    17.5.2005 10:59 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
    Rozbalit Rozbalit vše Re: C++ a fstream
    No, jak na to teď koukám, tak jsem to zjednodušil až moc, kdyby ten program hned neskončil, tak je samozřejmě potřeba delete dbFile; i při chybě (nebo mít dbFile na zásobníku...). Ale podstatné je to volání dbFile->clear() a to, že dbFile->open() stačí volat dvakrát.
    lobodpav avatar 17.5.2005 15:23 lobodpav | skóre: 8 | Ostrava
    Rozbalit Rozbalit vše Re: C++ a fstream
    Jojo, a odstranil jsi mi flag ios::binary, ale to jsou detaily...
    Hlavně, že mi to teď hezky běží :-) Dík.
    elviin avatar 17.5.2005 21:58 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: C++ a fstream

    twofish uz te zrejme uspokojil:). jen bych dodal pro inspiraci jine reseni:

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    namespace {
      const string JMENO = "file.txt";   
    }
    
    
    int main() {
      fstream test;
       
      test.exceptions ( ifstream::eofbit | ifstream::failbit | ifstream::badbit );
      
      try {
        test.open ( JMENO.c_str(), ios::in | ios::out | ios::binary | ios::trunc);
      }
      catch (ifstream::failure &e) {
        cerr << e.what() << ":"<< endl; 
        perror ("Vyjimka otevreni/cteni ze souboru.");
        exit(1);
      }
    
      return 0;
    }
    

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.