Domanda

Quando faccio

fstream someFile("something.dat", ios::binary|ios::out);
someFile.seekp(someLocation, ios::beg);
someFile.write(someData, 100);

Sembra di sostituire l'intero file con quei 100 byte invece di sostituire solo le appropriate 100 byte, come se avessi specificato ios :: trunc. C'è un modo portatile per non averlo tronca il file?

Modifica:? ios aggiungendo :: nel sembra fare il trucco, per il motivo per cui è necessario questo, ed è che il comportamento standard

Modifica # 2: non sto cercando di aggiungere al file esistente. È necessario sostituire i 100 byte, lasciando il resto inalterato.

È stato utile?

Soluzione

Si desidera che l'accodamento di bandiera, ios :: app, se si desidera scrivere alla fine del file.

Per fare da qualche parte arbitrariamente nel mezzo del file, è necessario chiedere al posto giusto. È possibile farlo aprendo il file per il dentro e fuori, ma se fossi in te piacerebbe creare un file temporaneo, copia di ingresso fino a segnare, scrivere i nuovi dati, copiare il resto a EOF, chiudere i file e sostituire il precedente versione con il file temporaneo. Questo è chiamato un "Master di aggiornamento del file".

Altri suggerimenti

AFAIR ios :: solo specifica il file è per l'uscita e iOS: binary specifica solo i file è binario. Il comportamento predefinito per un flusso è quello di creare un nuovo file e sovrascrivere il vecchio file. Se si desidera modificare un file esistente è necessario aprire il file con il flag ios :: app.

ATM non riesco a controllare i miei riferimenti in modo da essere sicuri di controllare due volte, ma io felieve che è accurata.

Dato che il file esiste già aperto nella 'lettura e scrittura' modalità e poi fare seekp. Credo che funzionerà.

fstream someFile("something.dat", ios::binary|ios::out|ios::in);
someFile.seekp(someLocation, ios::beg);
someFile.write(someData, 100);

I ios: in maschera dice il puntatore del file alla posizione all'inizio del file in modo che possa iniziare a leggere in fin dall'inizio. Ma, si consiglia di utilizzare fseek per impostare il puntatore del file all'inizio del file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top