Gestione di Stream e File in C#

Il framework .NET consente tramite varie classi apposite di manipolare i file, da dire che questi ultimi sono trattati dalla piattaforma come flussi ( streams ) di dati in formato testo o binari. Ecco le classi predisposte:

  • Stream – classe astratta che supporta la lettura e scrittura di byte
  • FileStream – supporta l’accesso casuale ai file, supportando anche la modalità asincrona ed il buffering
  • BufferedStream – flusso che aggiunge il supporto al buffering ad un altro flusso ( queste classi si possono “comporre”)
  • MemoryStream – flusso senza buffer che incapsula i dati direttamente leggibili in memoria; non ha un archivio di memorizzazione persistente, ma è utile come buffer temporaneo
  • NetworkStream – implementa un flusso su una connessione di rete
  • BinaryReader – legge stringhe codificate e tipi di dato nativi da un flusso
  • BinaryWriter – scrive stringhe codificate e tipi di dato nativi su un flusso
  • TextReader – classe astratta di lettura testo con supporto unicode
  • TextWriter – classe astratta di scrittura testo con supporto unicode
  • StringReader – legge da una stringa o flusso e memorizza in un flusso o stringa
  • StringWriter – scrive su una stringa o flusso a partire da un flusso o da una stringa
  • StreamReader – legge i caratteri da un flusso utilizzando un encoding per convertire byte a caratteri e vicerversa
  • StreamWriter – scrive i caratteri su un flusso utilizzando un encoding per convertire byte a caratteri e vicerversa

La piattaforma .NET dispone anche di classi per la manipolazione del file system, dalla creazione, spostamento, cambio di nome alla cancellazione di file e directory.

  • File –  fornisce metodi statici di manipolazione file
  • FileInfo – rappresenta un file e fornisce metodi di manipolazione
  • Directory – fornisce i metodi statici di manipolazione di cartelle
  • DirectoryInfo – rappresenta una directory e fornisce metodi di manipolazione
  • Path – manipola stringhe che rappresentano file e directory
  • FileSystemInfo – classe base astratta che funge da superclasse di FileInfo e DirectoryInfo

Tutte queste classi risiedono nel namespace System.IO. Dopo tutta questa teoria vediamo un pò di pratica attraverso questo esempio.

using System;
using System.IO;

public class Corso
{
   static void Main(string[] args)
   {
      FileStream f = null;
      StreamWriter sw = null;

      try
      {
          f = new FileStream("test.txt", FileMode.OpenOrCreate,
                    FileAccess.Write);
          sw = new StreamWriter(f);
      }
      catch (Exception e)
      {
           Console.WriteLine(e.Message);
           Console.ReadKey();
           return;
     }

     sw.WriteLine("Questo è soltanto un piccolo test\
          con un file testuale");
     Console.WriteLine("Scrittura del file {0}\
          avvenuta con successo!", f.Name);
     sw.Close();
     f.Close();

    Console.ReadKey();
  }
}

Ora andiamo a leggere il file che abbiamo creato e lo stamperemo a video, poi cancelleremo il file.

using System;
using System.IO;

public class Corso
{
    static void Main(string[] args)
    {
        FileStream f = null;
        StreamReader sr = null;

        try
       {
          f = new FileStream("test.txt", FileMode.OpenOrCreate,
                  FileAccess.Read);
         sr = new StreamReader(f);
       }
       catch (Exception e)
       {
            Console.WriteLine(e.Message);
            Console.ReadKey();
            return;
       }

       string buffer = sr.ReadLine();
       Console.WriteLine(buffer);
       sr.Close();
       f.Close();

       File.Delete("test.txt");

       Console.ReadKey();
   }
}

<< Lezione PrecedenteInizio CorsoIndice LezioniLezione Successiva >>

Di Giampaolo Rossi

Sviluppatore software da oltre 16 anni.