Stream in C#: StreamReader e StreamWriter [Esempio]

⚡ Riepilogo intelligente

Lo stream AC# è un livello tra la tua applicazione e un file che ti consente di leggere o scrivere dati in piccoli blocchi. Qui imparerai come StreamReader e StreamWriter lavoro, con esempi e le principali tipologie.

  • 🌊 Che cosa è: Uno stream è un livello intermedio tra la tua applicazione e un file.
  • ???? StreamReader: StreamReader legge il testo da un file una riga o un blocco alla volta.
  • ✍️ BachecaWriter: BachecaWriter Scrive il testo in un file tramite un flusso di dati.
  • 🧩 Tipi di flusso: FileStream, MemoryStream e BufferedStream derivano tutti dalla classe Stream.
  • 🤖 Aiuto tramite intelligenza artificiale: Strumenti di intelligenza artificiale come GitHub Copilot generano istantaneamente codice C# in streaming.

C# Stream Reader e Writer

Cos'è il flusso C#?

Nelle operazioni sui file C#, in genere vengono utilizzati i flussi per leggere e scrivere sui file. Uno stream è un livello aggiuntivo creato tra un'applicazione e un file. Il flusso viene utilizzato per garantire operazioni di lettura e scrittura fluide sul file.

I flussi vengono normalmente utilizzati durante la lettura di dati da file di grandi dimensioni. Utilizzando i flussi, i dati di file di grandi dimensioni vengono suddivisi in piccoli blocchi e inviati al flusso. Questi blocchi di dati possono quindi essere letti dall'applicazione.

Il motivo per cui lo suddividiamo in piccole parti è dovuto all'impatto sulle prestazioni della lettura di un file di grandi dimensioni in un colpo solo. Se dovessi leggere i dati, ad esempio, di un file da 100 MB in una sola volta, la tua applicazione potrebbe bloccarsi e diventare instabile. L'approccio migliore è quindi utilizzare i flussi per suddividere il file in blocchi gestibili.

Pertanto, quando viene eseguita un'operazione di scrittura su file, i dati da scrivere vengono prima scritti nel flusso. Dal flusso, i dati vengono quindi scritti nel file. Lo stesso vale per l'operazione di lettura. Nell'operazione di lettura, i dati vengono prima trasferiti dal file allo stream. I dati vengono quindi letti dall'applicazione tramite il flusso. Diamo un'occhiata a un esempio di come possiamo leggere e scrivere utilizzando i flussi.

Tipi di stream in C#

Tutte le classi stream in C# derivano dall'abstract Stream classe in System.IO namespace. Ogni tipo si rivolge a una diversa origine dati, ma condivide gli stessi metodi di lettura e scrittura. Gli stream più comunemente utilizzati sono elencati di seguito.

  • FileStream Legge e scrive su file presenti sul disco, un byte o un blocco alla volta.
  • MemoryStream memorizza i dati in memoria anziché in un file, il che è utile per i buffer temporanei.
  • BufferedStream incapsula un altro flusso per ridurre il numero di operazioni lente su disco o rete.
  • Flusso di rete Invia e riceve dati tramite un socket di rete.

Per lavorare con il testo, C# fornisce il StreamReader and StreamWriter classi di supporto, che incapsulano uno stream e saranno trattate nelle sezioni successive.

Lettore di flussi

Il lettore di flussi viene utilizzato per leggere i dati da un file utilizzando i flussi. I dati del file vengono prima letti nel flusso. Successivamente l'applicazione legge i dati dal flusso.

Per il nostro esempio, supponiamo di avere un file nell'unità D chiamato Esempio.txt. Il file sarà un semplice file di testo e avrà 2 righe come mostrato di seguito

  • Guru99 – .Net
  • Guru99 -C#

Per il nostro esempio, creeremo una semplice applicazione Console e lavoreremo con i flussi di file

Diamo un'occhiata a un esempio di come possiamo utilizzare i flussi per leggere i dati da un file. Inserisci il codice seguente nel file program.cs.

Lettore di flussi

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  class Tutorial
  {
   static void Main(string[] args)
   {
    String path = @"D:\Example.txt";

    using (StreamReader sr = File.OpenText(path))
    {
     String s = "";

     while ((s = sr.ReadLine()) != null)
     {
      Console.WriteLine(s);
     }
    }
   Console.ReadKey();
  }
 }
}

Code Spiegazione:-

  1. Innanzitutto, dichiariamo un oggetto lettore di flusso. L'oggetto lettore di flusso viene utilizzato in C# per definire un flusso dal file all'applicazione. I dati verranno inviati dal file al flusso ogni volta che i dati vengono letti dal file. Il file.OpenText viene utilizzato per aprire il file "Example.txt" in modalità di sola lettura. Il gestore del file viene quindi inviato all'oggetto lettore di flusso.
  2. Successivamente, definiamo una variabile temporanea "s" che verrà utilizzata per leggere tutti i dati dal file.
  3. Utilizziamo quindi il metodo di lettura del flusso ReadLine per leggere ogni riga dal buffer del flusso. Quando eseguiamo questo operazione, ogni riga verrà prima trasferita dal file al buffer. Quindi la stringa line verrà trasferita dal buffer alla variabile 's'. Quindi scriviamo il contenuto della stringa 's' nella console.

Quando viene impostato il codice precedente e il progetto viene eseguito utilizzando Di Visual Studio, otterrai l'output seguente.

Produzione:-

Lettore di flussi

Dall'output, puoi vedere che lo Stream Reader legge entrambe le righe dal file. Infine le righe della stringa letta dallo stream venivano inviate alla Console.

Bacheca Writer

Lo stream writer viene utilizzato per scrivere dati su un file utilizzando i flussi. I dati dell'applicazione vengono prima scritti nel flusso. Successivamente lo stream scrive i dati nel file. Diamo un'occhiata a un esempio di come possiamo utilizzare i flussi per scrivere dati da un file. Inserisci il codice seguente nel file program.cs.

Bacheca Writer

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  class Tutorial
  {
   static void Main(string[] args)
   {
    String path = @"D:\Example.txt";
    
    using (StreamWriter sr = File.AppendText(path))
    {
     sr.WriteLine("Guru99 - ASP.Net");
     sr.Close();

     Console.WriteLine(File.ReadAllText(path));
    }
    Console.ReadKey();
  }
 }
}

Code Spiegazione:-

  1. Innanzitutto, dichiariamo un oggetto stream writer. L'oggetto stream writer viene utilizzato in C# per definire un flusso. Il flusso viene quindi utilizzato per scrivere i dati dall'applicazione al file. I dati verranno inviati dall'applicazione al flusso ogni volta che è necessario scrivere i dati. Il comando File.AppendText viene utilizzato per aprire il file "Example.txt" in modalità di aggiunta. Il gestore del file viene quindi inviato all'oggetto stream writer.
  2. Stiamo utilizzando il metodo di scrittura del flusso Writeline per scrivere la riga "Guru99 – ASP.Net” allo stream. Dallo stream, la riga verrà quindi scritta nel file.
  3. Chiudiamo quindi lo stream writer dopo aver scritto il file. Normalmente è una buona pratica chiudere i gestori di file quando il file non è più necessario per scopi di scrittura.
  4. Infine, leggiamo nuovamente il contenuto del file e lo scriviamo nel registro della console. Questo serve per verificare se la riga è stata scritta nel file.

Una volta impostato il codice sopra riportato e eseguito il progetto tramite Visual Studio, si otterrà l'output seguente.

Produzione:-

Bacheca Writer

Dall'output, puoi vedere che la riga “Guru99 – ASP.Net” è stato aggiunto correttamente al file. Tutte e 3 le righe di testo sono visibili nella console.

DOMANDE FREQUENTI

Uno stream è un livello intermedio tra un'applicazione e un file. Suddivide i file di grandi dimensioni in piccoli blocchi, consentendo la lettura o la scrittura dei dati senza dover caricare l'intero file in memoria.

StreamReader legge i dati di testo da un file tramite uno stream. File.OpenText restituisce un StreamReader e il suo metodo ReadLine legge il file una riga alla volta.

BachecaWriter Scrive dati di testo in un file tramite uno stream. File.AppendText restituisce uno StreamWritere il suo metodo WriteLine invia ogni riga al file.

I flussi comuni includono FileStream per i file, MemoryStream per i dati in memoria, BufferedStream per il buffering e NetworkStream per i socket. Tutti derivano da abs.tracClasse Stream.

FileStream legge e scrive byte grezzi in un file, mentre StreamReader incapsula un flusso per leggere il testo come caratteri e righe. StreamReader è più semplice da usare per i file di testo.

Gli assistenti IA come GitHub Copilot completano automaticamente StreamReader e StreamWriter codice, aggiungi blocchi using per la gestione delle risorse e genera cicli di lettura file da un breve commento.

Sì. Gli strumenti basati sull'intelligenza artificiale generano metodi di lettura e scrittura dei flussi, suggeriscono il buffering per i file di grandi dimensioni e aggiungono istruzioni `using` in modo che i flussi vengano chiusi in modo sicuro.

L'istruzione `using` chiude e rilascia automaticamente lo stream al termine del blocco, anche in caso di errore. Questo libera il descrittore del file e previene perdite di risorse.

Riassumi questo post con: