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

Stato
Discussione chiusa ad ulteriori risposte.

orsetto_

Nuovo Utente
12
1
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
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
std::ofstream
Hai sia .operator<<(...) che .write(const char_type *, std::streamsize)
 

orsetto_

Nuovo Utente
12
1
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)
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
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:

orsetto_

Nuovo Utente
12
1
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.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili