Parzialmente troncare un flusso (fstream o ofstream) in C ++
Domanda
Sto cercando di troncare parzialmente (o accorciare) un file esistente, utilizzando fstream. Ho provato a scrivere un carattere EOF, ma questo sembra non fare nulla.
Qualsiasi aiuto sarebbe apprezzato ...
Soluzione
Non credo che si può. Ci sono molte funzioni per spostare "su e giù" la gerarchia wrapper per HANDLE<->int<->FILE *
, almeno su Windows, ma non c'è un "adeguato" per estrarre il FILE *
da un oggetto iostreams (se davvero è ancora implementato con uno).
Si possono trovare questa domanda di essere di aiuto.
Personalmente vi consiglio vivamente sterzo chiaro di iostreams, sono mal progettati, pesantemente C ++ e brutta da guardare. Date un'occhiata a , o avvolgere stdio.h se è necessario utilizzare le classi.
La funzione rilevante per stdio è ftruncate () .
Altri suggerimenti
Il Boost.Interprocess biblioteca definisce un funzione truncate
portatile. Per qualche motivo non è documentato, ma lo si può trovare questo file di intestazione .
Sarà dipende dal sistema operativo. La maggior parte dei sistemi operativi supportano questa, ma in modi diversi. Su Windows, c'è un SetEndOfFile()
. Su Unix e sistemi simili, si lseek
in cui si desidera il file alla fine, e fa un lwrite
di zero byte lì. Altri sistemi operativi senza dubbio utilizzare altri metodi.
ho morso la pallottola alla fine e ho letto la parte del file da tenere a una matrice poi ri-scritto. Non è la soluzione migliore -. Ma come i file saranno sempre piccolo ho deciso di accettare questo metodo