RISOLTO Qual è l'equivalente di PrintWriter.append() in c++?

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

orsetto_

Nuovo Utente
Messaggi
12
Reazioni
1
Punteggio
24
Salve a tutti, volevo chiedere se esiste un equivalente del metodo append() appartenente alla classe PrintWriter per il C++
Devo scrivere ripetutamente su un file e mi sarebbe comoda una cosa del genere, anche perché dovrebbe essere più veloce (?)
Grazie in anticipo
 
std::ofstream
Hai sia .operator<<(...) che .write(const char_type *, std::streamsize)
 
Beh non esattamente, usando quei due modi l'output viene mandato immediatamente, invece con io metodo append() del java, l'output non viene inviato finché non viene chiamato il metodo flush()
(Chiedo scusa ma non so usare termini tecnici:asd:, spero di essermi spiegato)
 
Beh non esattamente, usando quei due modi l'output viene mandato immediatamente, invece con io metodo append() del java, l'output non viene inviato finché non viene chiamato il metodo flush()
(Chiedo scusa ma non so usare termini tecnici:asd:, spero di essermi spiegato)
In realtà nemmeno .operator<<() scrive sul buffer dello stream immediatamente ma quando viene chiamato std::flush (quando il buffer dell’oggetto std::ofstream è pieno, magari con std::endl ma anche "\n" può chiamarlo, dipende dalla implementazione...).

Se vuoi una cosa simile in C++ ti basta una classe con un buffer interno, un metodo append(...) e un metodo flush() che scrive su un file (che gestisce internamente il file o un reference a quello) solo quando chiami flush.

Sono quasi certo che la libreria standard non metta nulla a disposizione di simile, forse Boost ma non so. Puoi comunque fartelo manualmente appunto

———
Tipo
C++:
template <class CharType>
class MyStreamWriter final {
public:
    MyStreamWriter(std::basic_ofstream<CharType>& s)
        : stream (s)
    { }
    void append(const std::basic_string<CharType>& string) {
        buffer.push_back(string);
    }
    void flush() {
        for (auto& s : buffer)
            stream << s;
        stream << std::flush;   
        buffer.resize(0);
    }
private:
    std::basic_ofstream<CharType>& stream;
    std::vector<std::basic_string<CharType>> buffer;
};
 
Ultima modifica:
Ciao, scusami se rispondo ora. In ogni caso, hai ragione! Non avevo pensato minimamente a una soluzione del genere.
Grazie mille è esattamente quello che cercavo!
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top