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í
×

    včera 20:55 | Nová verze

    Byla vydána nová verze 2023.4 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení. Vypíchnout lze podporu Cloud ARM64, Vagrant Hyper-V a Raspberry Pi 5.

    Ladislav Hagara | Komentářů: 0
    včera 17:00 | IT novinky

    Společnosti IBM, Meta a dalších vice než 50 zakládajících členů (bez Microsoftu a OpenAI) vytvořili mezinárodní alianci AI Alliance pro spolupráci na vývoji a rozvoji otevřené, bezpečné a odpovědné umělé inteligence.

    Ladislav Hagara | Komentářů: 12
    včera 14:44 | IT novinky

    Služba pro hlídání uniklých hesel Have I Been Pwned oslavila 10. výročí. Troy Hunt ji spustil 4. prosince 2013 (Twitter).

    Ladislav Hagara | Komentářů: 2
    včera 06:00 | Humor

    Programovací jazyk HTML.

    Ladislav Hagara | Komentářů: 5
    4.12. 23:00 | Upozornění

    Podpora TORu v Debianu 11 Bullseye a 10 Buster byla ukončena. Doporučuje se přechod na Debian 12 Bookworm.

    Ladislav Hagara | Komentářů: 0
    4.12. 22:33 | IT novinky

    Příkaz "opakuj donekonečna" je nově v rozporu s podmínkami používání ChatGPT. Příkaz vedl k prozrazení trénovacích dat [/.].

    Ladislav Hagara | Komentářů: 7
    4.12. 21:55 | Nová verze

    GNU Project Debugger aneb GDB byl vydán ve verzi 14.1. Podrobný přehled novinek v souboru NEWS. Vypíchnout lze podporu NO_COLOR a Debugger Adapter Protocol (DAP).

    Ladislav Hagara | Komentářů: 0
    4.12. 16:55 | Nová verze

    Byla vydána verze 5.0 webového aplikačního frameworku napsaného v Pythonu Django (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    4.12. 16:44 | Nová verze

    TuxClocker je Qt GUI nástroj pro monitorování a nastavování (přetaktovávání) hardwaru na Linuxu. Aktuální verze je 1.4.0. Z novinek lze vypíchnout monitorování využití AMD a NVIDIA VRAM nebo sledování spotřeby energie procesorů AMD a Intel.

    Ladislav Hagara | Komentářů: 0
    3.12. 09:44 | Komunita

    O víkendu (15:00 až 23:00) probíhá EmacsConf 2023, tj. online konference vývojářů a uživatelů editoru GNU Emacs. Sledovat ji lze na stránkách konference. Záznamy jsou k dispozici přímo z programu.

    Ladislav Hagara | Komentářů: 10
     (41%)
     (12%)
     (47%)
    Celkem 59 hlasů
     Komentářů: 1, poslední 4.12. 22:13
    Rozcestník

    Dotaz: C++ a fstream

    lobodpav avatar 16.5.2005 21:01 lobodpav | skóre: 8 | Ostrava
    C++ a fstream
    Přečteno: 2369×
    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.