Sunday, 1 October 2017

Wifstream Binario Options


Sto leggendo un file binario come: Ma sto realizzando questa non è una vera lettura binaria. Il ifstream legge effettivamente un byte e lo converte in un ampio char. Quindi, se il file binario ha il contenuto 0x112233. ff. Io in realtà letto 0x110022003300. FF00. Ciò non ha molto senso per me: prima, ho solo bisogno di utilizzare una vasta fstream perché il nome del file non è latino. In secondo luogo, se dico la fstream è binario, perché non leggere leggere ampi caratteri Il codice qui sotto fa quello che voglio. C'è un modo per ottenere che l'utilizzo fstreams std chiesto 21 marzo 11 alle 19:15 I39m utilizzando Visual Studio per Windows e il compilatore Intel per Linux. La soluzione ha funzionato bene in Windows. Ho haven39t ancora provato su Linux. It39s piuttosto un soluzione elegante. I39d preferiscono non fare affidamento sulle estensioni del compilatore però. Pensi che si può fare questo attenersi alla norma, forse specificando il charset come parametro basato su modelli per ifstream ndash rturrado 22 marzo 11 alle 15:15 rturrado: (tolto il mio commento precedente) Non consiglio più Boost. Filesystem fin dalla sua approccio è quello di definire interfacce differenti su diverse piattaforme, che provoca sostanzialmente problemi di portabilità e rende infatti difficile scrivere Unicode codice corretto. Dalla mia esperienza, è meglio seguire l'approccio che ho scritto nel EDIT. ndash ybungalobill 23 agosto 12 alla 13: 00C file binario IO Normalmente, per file binario io non si utilizza il ltlt orientata al testo convenzionale e operatori Si può fare, ma che è un argomento avanzato. Modello di base per File IO In C, le classi stream di file sono progettati con l'idea che un file deve semplicemente essere visto come un flusso o array di byte non interpretati. Per comodità, l'array di byte memorizzati in un file è indicizzato da zero a len -1, dove len è il numero totale di byte del file intero. Ogni file aperto ha due posizioni associati: La posizione di lettura corrente, che è l'indice del prossimo byte che verrà letto dal file. Questo è chiamato il puntatore get in quanto punta al carattere successivo che il metodo get base tornerà. La posizione di scrittura attuale, che è l'indice della posizione di byte in cui verrà inserito il successivo byte di uscita. Questo è chiamato il puntatore put in quanto indica la posizione in cui il metodo put base metterà il suo parametro. Queste due posizioni di file sono indipendenti, e uno dei due può puntare ovunque a tutti nel file. Getting La dimensione di un file Il modo tipico per ottenere la dimensione di un file è quello di utilizzare la funzione di libreria C stat. Si noti che il secondo parametro per stat è un puntatore. E 'vostra responsabilità di creare e gestire la memoria in cui stat collocherà i suoi risultati, e l'indirizzo di tale memoria è ciò che si dovrebbe passare da questo secondo parametro. L'esempio sopra mostra l'uso di una variabile locale per contenere i risultati restituiti da stat. Apertura di un file Un flusso oggetto file può essere aperto in uno dei due modi. In primo luogo, è possibile fornire un nome di file con un parametro di modalità IO al costruttore quando si dichiara un oggetto: In alternativa, dopo che un oggetto flusso di file è stato dichiarato, è possibile chiamare il suo metodo aperto: Entrambi gli approcci lavorerà con un'ifstream. un ofstream. o un oggetto fstream. Normalmente, quando la manipolazione di file di testo, uno omette il secondo parametro (il parametro del modo io). Tuttavia, al fine di manipolare i file binari, si dovrebbe sempre specificare la modalità di io, tra ios :: binari come una delle bandiere della modalità. Per l'accesso readwrite a un file, utilizzare un fstream. Nota: Se sei un utente GNU g (versione 2.7.x o precedente), allora non usare io bandiere modalità quando si aprono oggetti ifstream. A causa di un bug nell'implementazione GNU libg, le bandiere non saranno interpretati correttamente. Se si lavora in ambiente Unix, omettere le bandiere del modo io del tutto se si sta lavorando con la g MS-DOS, quindi utilizzare un oggetto fstream. Questa nota si applica solo agli utenti g. Lettura da un file Per leggere da un oggetto o fstream ifstream, utilizzare il metodo di lettura. Questo metodo richiede due parametri: La funzione membro lettura estrae un dato numero di byte dal flusso determinato, ponendoli in memoria puntato dal primo parametro. E 'vostra responsabilità di creare e gestire la memoria in cui lettura avrà luogo il suo risultato, così come per garantire che sia abbastanza grande da contenere il numero di byte richiesti. I byte che vengono letti e non interpretato, il metodo non si assume nulla terminazioni di riga, e il metodo di lettura non pone un terminatore null alla fine dei byte che vengono lette. Se si verifica un errore durante la lettura (per esempio, se leggete fuori alla fine di un file), il flusso viene posto in uno stato di errore. In tal caso, è possibile utilizzare il metodo gcount per scoprire il numero di caratteri che sono stati effettivamente letto, e utilizzare il metodo Clear per ripristinare il flusso ad uno stato utilizzabile. Una volta che un flusso entra in uno stato di errore, tutte le operazioni di lettura futuri verranno a mancare. Il riposizionamento del puntatore Arrivare a cambiare la posizione del puntatore ottenere (la posizione di lettura del file) di un oggetto o di fstream ifstream, utilizzare il metodo seekg. La forma di base di questa operazione richiede un solo parametro: Uno streampos è essenzialmente un valore intero lungo senza segno. seekg sposta il puntatore raggiungere la posizione di file assoluto specificato (dove 0 è l'inizio del file). Quando si chiama seekg fare attenzione dei tipi di tuoi argomenti: Il problema di cui sopra è che i file possono essere relativamente grande, in modo da streampos possono contenere numeri molto grandi. Ma soprattutto, se blknumber è al di sopra 63. a causa del tipo di blknumber e BLKSIZE (entrambi int s), su un PC loro prodotto può essere solo 16 bits. Per correggere questo, garantire costanti utilizzate nel posizionamento file siano lunghe quantità, o che tutte le variabili utilizzate in tale posizionamento sono quantità lunghe, o entrambi. È possibile determinare la posizione del puntatore get corrente utilizzando myFile. tellg (), un metodo senza parametri che restituisce l'indice del puntatore get sul torrente dato. Esiste anche una variante di seekg che consente di specificare una posizione relativa alla posizione corrente del puntatore get, o relativo alla fine del file. Scrittura di un file Per scrivere ad un oggetto o fstream ofstream, utilizzare il metodo di scrittura. Questo metodo richiede due parametri: La funzione membro di scrittura scrive un dato numero di byte sul flusso determinato, a partire dalla posizione del puntatore put. Se il puntatore put è in corso alla fine del file, il file viene esteso. Se i punti di put puntatore nel mezzo del file, caratteri nel file vengono sovrascritti con i nuovi dati. I byte che sono scritte e non interpretato, non viene aggiunto alcun ritorno dopo i dati, e il metodo di scrittura non assume c'è un terminatore null alla fine dei byte che vengono scritti. Se si verifica un errore durante la scrittura (ad esempio, se si esaurisce lo spazio su disco), il flusso viene posto in uno stato di errore. Tali errori non sono comuni come errori di lettura, e spesso non sono controllati. Il riposizionamento del puntatore Mettere Per cambiare la posizione del puntatore put (la posizione di lettura file) di un oggetto o di fstream ofstream, utilizzare il metodo seekp. La forma di base di questa operazione richiede un solo parametro: Uno streampos è essenzialmente un valore intero lungo senza segno. seekp sposta il puntatore impostato in posizione di file assoluto specificato (dove 0 è l'inizio del file). È possibile determinare la posizione del puntatore put corrente utilizzando myFile. tellp (), un metodo senza parametri che restituisce l'indice del puntatore put sul torrente dato. Esiste anche una variante di seekp che consente di specificare una posizione relativa alla posizione corrente del puntatore put, o relativo alla fine del file. Lettura e scrittura dei dati Complesso Anche se la lettura e scrittura metodi accettano un puntatore char, non v'è alcun obbligo che i dati letti Andor scrivere si terrà in un array di caratteri. È possibile leggere o scrivere oggetti di dati complessi che utilizzano tipo semplice fusione di puntatori: chiusura di un file Per tutti gli oggetti flusso di file, utilizzare: std. ifstream. Apri Apre il file identificato da argomento filename. associandolo con l'oggetto corrente, in modo che le operazioni vengono eseguite InputOutput sul suo contenuto. Modalità argomento specifica la modalità di apertura. Se il flusso è già associato a un file (vale a dire è già aperto), chiamare questa funzione viene a mancare. L'associazione di file di un flusso è tenuto dal suo buffer flusso interno: Internamente, la funzione chiama rdbuf () - gtopen (nome file, modalità) la funzione imposta failbit in caso di guasto. Parametri stringa nome del file con il nome del file da aprire. Specifics circa il suo formato e la validità dipendono l'attuazione biblioteca e ambiente funzionante. modalità bandiere che descrivono il modo io richiesto per il file. Questo è un oggetto del tipo openMode membro maschera di bit che consiste in una combinazione delle seguenti costanti utente:

No comments:

Post a Comment