Usare Visual C# per leggere e scrivere in un file di testo
Questo articolo aiuta a leggere e scrivere in un file di testo utilizzando Visual C#.
Versione originale del prodotto: Visual Studio
Numero della Knowledge Base originale: 816149
Riepilogo
Nella sezione Lettura di un file di testo di questo articolo viene descritto come utilizzare la classe StreamReader
per leggere un file di testo. Nelle sezioni Scrivere un file di testo (esempio 1) e Scrivere un file di testo (esempio 2) viene descritto come utilizzare la classe StreamWriter
per scrivere testo in un file.
Leggere un file di testo
Nel codice seguente viene utilizzata la classe StreamReader
per aprire, leggere e chiudere il file di testo. Si può passare il percorso di un file di testo al costruttore StreamReader
per aprirlo automaticamente. Il metodo ReadLine
legge ogni riga di testo e incrementa il puntatore del file alla riga successiva durante la lettura. Quando il metodo ReadLine
raggiunge la fine del file, restituisce un riferimento null. Per ulteriori informazioni, vedere Classe StreamReader.
Creare un file di testo di esempio in Blocco note. Procedere come segue:
- Incollare il testo hello world in Blocco note.
- Salvare il file con nome Sample.txt.
Avviare Microsoft Visual Studio.
Nel menu File puntare su Nuovo, quindi scegliere Progetto.
Selezionare Progetti Visual C# in Tipi di progetto e quindi selezionare Applicazione console in Modelli.
Aggiungere il codice seguente all'inizio del file Class1.cs:
using System.IO;
Aggiungere il codice seguente al metodo
Main
:String line; try { //Pass the file path and file name to the StreamReader constructor StreamReader sr = new StreamReader("C:\\Sample.txt"); //Read the first line of text line = sr.ReadLine(); //Continue to read until you reach end of file while (line != null) { //write the line to console window Console.WriteLine(line); //Read the next line line = sr.ReadLine(); } //close the file sr.Close(); Console.ReadLine(); } catch(Exception e) { Console.WriteLine("Exception: " + e.Message); } finally { Console.WriteLine("Executing finally block."); }
Dal menu Debug scegliere Avvia per compilare ed eseguire l'applicazione. Premere INVIO per chiudere la finestra della Console. Nella finestra Console viene visualizzato il contenuto del file Sample.txt:
Hello world
Scrivere un file di testo (esempio 1)
Nel codice seguente viene utilizzata la classe StreamWriter
per aprire, scrivere e chiudere il file di testo. In modo analogo alla classe StreamReader
, è possibile passare il percorso di un file di testo al costruttore StreamWriter
per aprire automaticamente il file. Il metodo WriteLine
scrive una riga di testo completa nel file di testo.
Avviare Visual Studio.
Nel menu File puntare su Nuovo, quindi scegliere Progetto.
Selezionare Progetti Visual C# in Tipi di progetto e quindi selezionare Applicazione console in Modelli.
Aggiungere il codice seguente all'inizio del file Class1.cs:
using System.IO;
Aggiungere il codice seguente al metodo
Main
:try { //Pass the filepath and filename to the StreamWriter Constructor StreamWriter sw = new StreamWriter("C:\\Test.txt"); //Write a line of text sw.WriteLine("Hello World!!"); //Write a second line of text sw.WriteLine("From the StreamWriter class"); //Close the file sw.Close(); } catch(Exception e) { Console.WriteLine("Exception: " + e.Message); } finally { Console.WriteLine("Executing finally block."); }
Dal menu Debug scegliere Avvia per compilare ed eseguire l'applicazione. Questo codice crea un file denominato Test.txt nell'unità C. Aprire Test.txt in un editor di testo, ad esempio Blocco note. Test.txt contiene due righe di testo:
Hello World!! From the StreamWriter class
Scrivere un file di testo (esempio 2)
Nel codice seguente viene utilizzata la classe StreamWriter
per aprire, scrivere e chiudere il file di testo. A differenza dell'esempio precedente, questo codice passa due parametri aggiuntivi al costruttore. Il primo parametro è il percorso e il nome del file. Il secondo parametro, true
, specifica che il file viene aperto in modalità Append. Se si specifica false
per il secondo parametro, il contenuto del file viene sovrascritto ogni volta che si esegue il codice. Il terzo parametro specifica Unicode
, in modo che StreamWriter
codifichi il file in formato Unicode. È inoltre possibile specificare i metodi di codifica seguenti per il terzo parametro:
- ASC11
- Unicode
- UTF7
- UTF8
Il metodo Write
è simile al metodo WriteLine
, con la differenza che il metodo Write
non incorpora automaticamente una combinazione di caratteri di ritorno a capo o avanzamento riga (CR/LF). È utile quando si desidera scrivere un carattere alla volta.
Avviare Visual Studio.
Scegliere Nuovo dal menu File, quindi fare clic su Progetto.
Fare clic su Progetti Visual C# in Tipi di progetto e quindi su Applicazione console in Modelli.
Aggiungere il codice seguente all'inizio del file Class1.cs:
using System.IO; using System.Text;
Aggiungere il codice seguente al metodo
Main
:Int64 x; try { //Open the File StreamWriter sw = new StreamWriter("C:\\Test1.txt", true, Encoding.ASCII); //Write out the numbers 1 to 10 on the same line. for(x=0; x < 10; x++) { sw.Write(x); } //close the file sw.Close(); } catch(Exception e) { Console.WriteLine("Exception: " + e.Message); } finally { Console.WriteLine("Executing finally block."); }
Dal menu Debug scegliere Avvia per compilare ed eseguire l'applicazione. Questo codice crea un file denominato Test1.txt nell'unità C. Aprire Test1.txt in un editor di testo, ad esempio Blocco note. Test1.txt contiene una singola riga di testo: 0123456789.
Elenco completo del codice per la lettura di un file di testo
//Read a Text File
using System;
using System.IO;
namespace readwriteapp
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
String line;
try
{
//Pass the file path and file name to the StreamReader constructor
StreamReader sr = new StreamReader("C:\\Sample.txt");
//Read the first line of text
line = sr.ReadLine();
//Continue to read until you reach end of file
while (line != null)
{
//write the line to console window
Console.WriteLine(line);
//Read the next line
line = sr.ReadLine();
}
//close the file
sr.Close();
Console.ReadLine();
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
finally
{
Console.WriteLine("Executing finally block.");
}
}
}
}
Elenco completo del codice per la scrittura di un file di testo (versione 1)
//Write a text file - Version-1
using System;
using System.IO;
namespace readwriteapp
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
try
{
//Pass the filepath and filename to the StreamWriter Constructor
StreamWriter sw = new StreamWriter("C:\\Test.txt");
//Write a line of text
sw.WriteLine("Hello World!!");
//Write a second line of text
sw.WriteLine("From the StreamWriter class");
//Close the file
sw.Close();
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
finally
{
Console.WriteLine("Executing finally block.");
}
}
}
}
Elenco completo del codice per la scrittura di un file di testo (versione 2)
//Write a text file - Version 2
using System;
using System.IO;
using System.Text;
namespace readwriteapp
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Int64 x;
try
{
//Open the File
StreamWriter sw = new StreamWriter("C:\\Test1.txt", true, Encoding.ASCII);
//Writeout the numbers 1 to 10 on the same line.
for(x=0; x < 10; x++)
{
sw.Write(x);
}
//close the file
sw.Close();
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
finally
{
Console.WriteLine("Executing finally block.");
}
}
}
}
Risoluzione dei problemi
Per tutte le modifiche di file, è consigliabile eseguire il wrapping del codice all'interno di un blocco try-catch-finally
per gestire errori ed eccezioni. In particolare, si possono rilasciare gli handle per il file nel blocco finale in modo che il file non venga bloccato per un periodo indefinito. Alcuni errori possibili riguardano un file inesistente o un file già in uso.