Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Lettura di File Utilizzando StreamReader | Strutture Dati e Gestione dei File
C# Oltre le Basi

bookLettura di File Utilizzando StreamReader

È possibile aprire e leggere file utilizzando il linguaggio di programmazione C#.

Per leggere un file, si crea un nuovo oggetto StreamReader. L'oggetto StreamReader accetta come parametro il percorso del file.

Note
Nota

Il termine "oggetto" sarà più chiaro nelle sezioni successive, tuttavia, per fini di comprensione, un oggetto è semplicemente un'istanza di un tipo di dato, e StreamReader è un tipo di dato proprio come int o float. Quindi i valori 1, 2.5f e "Hello World" possono tecnicamente essere considerati "oggetti" dei tipi di dato int, float e string rispettivamente.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Qui fileVarName rappresenta il nome della variabile in cui verrà memorizzato l'oggetto StreamReader, mentre fullPath dovrebbe essere il percorso completo del file sotto forma di stringa.

Ad esempio, è possibile aprire un file "text.txt" sul Desktop che ha il percorso C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

copy
1
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Note
Nota

È possibile utilizzare anche la dichiarazione implicita per rendere la sintassi leggermente più breve: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Si consideri che il file text.txt contiene il seguente contenuto:

text.txt

text.txt

copy
12345
This is some example text

Un oggetto StreamReader dispone di un metodo ReadLine che legge una riga dal file e la restituisce:

index.cs

index.cs

copy
1234
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);

Output:

This

Il metodo ReadLine sposta automaticamente il cursore alla riga successiva, quindi quando viene chiamato di nuovo, legge la riga successiva se presente; altrimenti restituisce semplicemente null (niente):

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL

Output:

This
is
some
example
text

Per leggere tutte le righe da un file si può utilizzare un ciclo while con una condizione che verifica se la riga successiva è null oppure no. Di seguito è riportato un modo semplice per farlo:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }

Output:

This
is
some
example
text

È possibile rendere il codice sopra riportato più ordinato utilizzando un trucco; a tal fine, esaminiamo le istruzioni di assegnazione. Un'istruzione di assegnazione ha anche un valore di ritorno, che corrisponde al valore assegnato. Questo concetto può essere compreso tramite un esempio:

index.cs

index.cs

copy
12
int a; Console.WriteLine(a = 7);

Output:

7

Viene restituito 7 perché l'istruzione a = 7 restituisce 7, che è il valore assegnato ad a.

Questa informazione può essere utilizzata per eseguire operazioni come assegnare lo stesso valore a più variabili in un'unica istruzione:

index.cs

index.cs

copy
123456789
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);

Output:

9
9
9

Utilizzando queste informazioni, è possibile modificare il codice di lettura del file per renderlo più conciso eliminando il codice non necessario:

index.cs

index.cs

copy
1234567
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }

All'interno della condizione, è stata prima utilizzata un'istruzione di assegnazione line = textFile.ReadLine() che aggiorna automaticamente la variabile line e poi verifica se è null in base al valore restituito dall'istruzione.

Dopo aver letto il file, è necessario chiuderlo utilizzando il metodo Close, altrimenti si possono verificare perdite di memoria o il file può rimanere bloccato e diventare inaccessibile da altre parti finché il programma è in esecuzione.

Il codice finale sarà il seguente:

index.cs

index.cs

copy
123456789
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
question-icon
=();

Click or drag`n`drop items and fill in the blanks

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 6

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 2.04

bookLettura di File Utilizzando StreamReader

Scorri per mostrare il menu

È possibile aprire e leggere file utilizzando il linguaggio di programmazione C#.

Per leggere un file, si crea un nuovo oggetto StreamReader. L'oggetto StreamReader accetta come parametro il percorso del file.

Note
Nota

Il termine "oggetto" sarà più chiaro nelle sezioni successive, tuttavia, per fini di comprensione, un oggetto è semplicemente un'istanza di un tipo di dato, e StreamReader è un tipo di dato proprio come int o float. Quindi i valori 1, 2.5f e "Hello World" possono tecnicamente essere considerati "oggetti" dei tipi di dato int, float e string rispettivamente.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Qui fileVarName rappresenta il nome della variabile in cui verrà memorizzato l'oggetto StreamReader, mentre fullPath dovrebbe essere il percorso completo del file sotto forma di stringa.

Ad esempio, è possibile aprire un file "text.txt" sul Desktop che ha il percorso C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

copy
1
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Note
Nota

È possibile utilizzare anche la dichiarazione implicita per rendere la sintassi leggermente più breve: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Si consideri che il file text.txt contiene il seguente contenuto:

text.txt

text.txt

copy
12345
This is some example text

Un oggetto StreamReader dispone di un metodo ReadLine che legge una riga dal file e la restituisce:

index.cs

index.cs

copy
1234
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);

Output:

This

Il metodo ReadLine sposta automaticamente il cursore alla riga successiva, quindi quando viene chiamato di nuovo, legge la riga successiva se presente; altrimenti restituisce semplicemente null (niente):

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL

Output:

This
is
some
example
text

Per leggere tutte le righe da un file si può utilizzare un ciclo while con una condizione che verifica se la riga successiva è null oppure no. Di seguito è riportato un modo semplice per farlo:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }

Output:

This
is
some
example
text

È possibile rendere il codice sopra riportato più ordinato utilizzando un trucco; a tal fine, esaminiamo le istruzioni di assegnazione. Un'istruzione di assegnazione ha anche un valore di ritorno, che corrisponde al valore assegnato. Questo concetto può essere compreso tramite un esempio:

index.cs

index.cs

copy
12
int a; Console.WriteLine(a = 7);

Output:

7

Viene restituito 7 perché l'istruzione a = 7 restituisce 7, che è il valore assegnato ad a.

Questa informazione può essere utilizzata per eseguire operazioni come assegnare lo stesso valore a più variabili in un'unica istruzione:

index.cs

index.cs

copy
123456789
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);

Output:

9
9
9

Utilizzando queste informazioni, è possibile modificare il codice di lettura del file per renderlo più conciso eliminando il codice non necessario:

index.cs

index.cs

copy
1234567
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }

All'interno della condizione, è stata prima utilizzata un'istruzione di assegnazione line = textFile.ReadLine() che aggiorna automaticamente la variabile line e poi verifica se è null in base al valore restituito dall'istruzione.

Dopo aver letto il file, è necessario chiuderlo utilizzando il metodo Close, altrimenti si possono verificare perdite di memoria o il file può rimanere bloccato e diventare inaccessibile da altre parti finché il programma è in esecuzione.

Il codice finale sarà il seguente:

index.cs

index.cs

copy
123456789
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
question-icon
=();

Click or drag`n`drop items and fill in the blanks

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 6
some-alt