Lettura da e scrittura in file binari

Il BinaryReader e BinaryWriter le classi vengono utilizzate per leggere e scrivere su un file binario.

La classe BinaryReader

Il BinaryReaderclass viene utilizzata per leggere dati binari da un file. UNBinaryReader oggetto viene creato passando un file FileStream oggetto al suo costruttore.

La tabella seguente descrive gli usi più comuni methods del BinaryReader classe.

Sr.No. Metodo e descrizione
1

public override void Close()

Chiude l'oggetto BinaryReader e il flusso sottostante.

2

public virtual int Read()

Legge i caratteri dal flusso sottostante e fa avanzare la posizione corrente del flusso.

3

public virtual bool ReadBoolean()

Legge un valore booleano dal flusso corrente e fa avanzare la posizione corrente del flusso di un byte.

4

public virtual byte ReadByte()

Legge il byte successivo dal flusso corrente e fa avanzare la posizione corrente del flusso di un byte.

5

public virtual byte[] ReadBytes(int count)

Legge il numero di byte specificato dal flusso corrente in una matrice di byte e fa avanzare la posizione corrente di quel numero di byte.

6

public virtual char ReadChar()

Legge il carattere successivo dallo stream corrente e fa avanzare la posizione corrente dello stream in conformità con la codifica utilizzata e il carattere specifico letto dallo stream.

7

public virtual char[] ReadChars(int count)

Legge il numero di caratteri specificato dal flusso corrente, restituisce i dati in una matrice di caratteri e fa avanzare la posizione corrente in base alla codifica utilizzata e al carattere specifico letto dal flusso.

8

public virtual double ReadDouble()

Legge un valore a virgola mobile a 8 byte dal flusso corrente e fa avanzare la posizione corrente del flusso di otto byte.

9

public virtual int ReadInt32()

Legge un intero con segno a 4 byte dal flusso corrente e fa avanzare la posizione corrente del flusso di quattro byte.

10

public virtual string ReadString()

Legge una stringa dal flusso corrente. La stringa è preceduta dalla lunghezza, codificata come un numero intero di sette bit alla volta.

La classe BinaryWriter

Il BinaryWriterclass viene utilizzata per scrivere dati binari in un flusso. Un oggetto BinaryWriter viene creato passando un oggetto FileStream al relativo costruttore.

La tabella seguente descrive i metodi comunemente usati della classe BinaryWriter.

Sr.No. Descrizione della funzione
1

public override void Close()

Chiude l'oggetto BinaryWriter e il flusso sottostante.

2

public virtual void Flush()

Cancella tutti i buffer per il writer corrente e fa in modo che tutti i dati memorizzati nel buffer vengano scritti nel dispositivo sottostante.

3

public virtual long Seek(int offset, SeekOrigin origin)

Imposta la posizione all'interno del flusso corrente.

4

public virtual void Write(bool value)

Scrive un valore booleano a un byte nel flusso corrente, con 0 che rappresenta falso e 1 che rappresenta vero.

5

public virtual void Write(byte value)

Scrive un byte senza segno nel flusso corrente e fa avanzare la posizione del flusso di un byte.

6

public virtual void Write(byte[] buffer)

Scrive una matrice di byte nel flusso sottostante.

7

public virtual void Write(char ch)

Scrive un carattere Unicode nel flusso corrente e fa avanzare la posizione corrente del flusso in base alla codifica utilizzata e ai caratteri specifici scritti nel flusso.

8

public virtual void Write(char[] chars)

Scrive un array di caratteri nel flusso corrente e fa avanzare la posizione corrente del flusso in base alla codifica utilizzata e ai caratteri specifici scritti nel flusso.

9

public virtual void Write(double value)

Scrive un valore a virgola mobile di otto byte nel flusso corrente e fa avanzare la posizione del flusso di otto byte.

10

public virtual void Write(int value)

Scrive un intero con segno a quattro byte nel flusso corrente e fa avanzare la posizione del flusso di quattro byte.

11

public virtual void Write(string value)

Scrive una stringa con prefisso di lunghezza in questo flusso nella codifica corrente di BinaryWriter e fa avanzare la posizione corrente del flusso in base alla codifica utilizzata e ai caratteri specifici scritti nel flusso.

Per un elenco completo dei metodi, visitare la documentazione di Microsoft C #.

Esempio

L'esempio seguente mostra la lettura e la scrittura di dati binari:

using System;
using System.IO;

namespace BinaryFileApplication {
   class Program {
      static void Main(string[] args) {
         BinaryWriter bw;
         BinaryReader br;
         
         int i = 25;
         double d = 3.14157;
         bool b = true;
         string s = "I am happy";
         
         //create the file
         try {
            bw = new BinaryWriter(new FileStream("mydata", FileMode.Create));
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot create file.");
            return;
         }
         
         //writing into the file
         try {
            bw.Write(i);
            bw.Write(d);
            bw.Write(b);
            bw.Write(s);
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot write to file.");
            return;
         }
         bw.Close();
         
         //reading from the file
         try {
            br = new BinaryReader(new FileStream("mydata", FileMode.Open));
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot open file.");
            return;
         }
         
         try {
            i = br.ReadInt32();
            Console.WriteLine("Integer data: {0}", i);
            d = br.ReadDouble();
            Console.WriteLine("Double data: {0}", d);
            b = br.ReadBoolean();
            Console.WriteLine("Boolean data: {0}", b);
            s = br.ReadString();
            Console.WriteLine("String data: {0}", s);
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot read from file.");
            return;
         }
         br.Close();
         Console.ReadKey();
      }
   }
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

Integer data: 25
Double data: 3.14157
Boolean data: True
String data: I am happy