C# I FILES

Transcript

C# I FILES
C# I FILES
Durante il normale sviluppo di applicazioni può succedere di dover memorizzare i dati inseriti dall’utente nel corso
dell’esecuzione del programma. C# offre numerose possibilità per memorizzare le informazioni, quelle che vedremo sono:

i file testuali
dove i contenuti sono interpretabili con la semplice apertura del file con un editor di testo

i file binari
dove i contenuti non sono consultabili con la semplice apertura del file con un editor di testo
Quando si intende memorizzare le informazioni in un file, occorre analizzare la tipologia e il numero di informazioni, per
poterle organizzare, in modo da riuscire a leggerle successivamente per poterle reinterpretare.
Ad esempio, se volessimo memorizzare le seguenti informazioni relative ad una persona:
 Nome
 Telefono
 Indirizzo
Potremmo scrivere ogni informazione su di una singola riga, in modo da facilitare la successiva lettura, ad esempio:
Rossi
338-234567
Via della luna, 14
Ma se le informazioni dovessero riguardare più persone, occorrerebbe separare le informazioni di una persona dall’altra,
e le possibilità potrebbero essere:
 scrivendole consecutivamente, su righe diverse, tenendo presente che il numero di informazioni relative a
ciascuna persona sono sempre lo stesso numero di righe (3 nel nostro caso), esempio:
Rossi
338-1234567
Via della luna, 14
Bianchi
338-1234567
Via del sole, 25

scrivendo tutte le informazioni relative ad una persona sulla stessa riga, separandole con un carattere speciale, ad
esempio |
Rossi|338-1234567|Via della luna, 14
Bianchi|338-1234567|Via del sole, 25
In questo caso il recupero delle informazioni dal file comprenderà la separazione delle informazioni, e il problema
potrebbe risolversi con l’utilizzo del metodo Split del tipo string che separa le stringhe divise dallo stesso
carattere e le restituisce sotto forma di in un array di stringhe, esempio:
string[] informazioni = rigaFile.Split(„|‟);
Una volta stabilita la metodologia di memorizzazione è possibile utilizzare le classi seguenti per interagire con il file:
 File
per ottenere informazioni su di un file, per crearlo o per aprirlo
 Directory
per ottenere informazioni su di una cartella o per crearla
 BinaryWriter
per scrivere in un file binario
 BinaryReader
per leggere da un file binario
 StreamWriter
per scrivere in un file di testo
 StreamReader
per leggere da un file di testo
Classe System.IO.File
E’ una classe statica che consente di eseguire diverse operazioni sui file.
Metodi di uso comune:
void Copy (string aSorgente, string aDestinazione, bool aSovrascrivi)
Copia il file “aSorgente” in “aDestinazione”, sovrascrivendo se indicato
void Delete (string aPercorso)
Elimina il file specificato
bool Exists (string aPercorso)
Verifica l’esistenza del file specificato
void Move (string aSorgente, string aDestinazione)
Sposta il file “aSorgente” in “aDestinazione”
Metodi per la gestione dei file TESTUALI:
StreamWriter CreateText (string aPercorso)
Crea un file per scrivervi del testo.
Restituisce lo stream su cui scrivere.
StreamReader OpenText (string aPercorso)
Apre un file in lettura.
Restituisce lo stream da cui leggere
void AppendAllText (string aPercorso, string aContenuto)
Scrive tutto il testo di “aContenuto” alla fine del file indicato in “aPercorso”
StreamWriter AppendText (string aPercorso)
Apre il file indicato in “aPercorso” predisponendolo per l’accodamento del testo alla fine del file.
Restituisce lo stream su cui scrivere.
string[] ReadAllLines (string aPercorso)
Legge tutte le righe dal file specificato, restituendole in forma di array di stringhe, una per ogni riga
string ReadAllText (string aPercorso)
Legge tutto il contenuto del file e lo restituisce in forma di stringa
void WriteAllLines (string aPercorso, string[] aLinee)
Scrive tutte le righe indicate dall’array “aLinee” nel file “aPercorso”
void WriteAllText (string aPercorso, string aContenuto)
Scrive tutto il testo indicato nel file “aPercorso”
Metodi per la gestione dei file BINARI:
FileStream Create (string aPercorso)
Crea o sovrascrive il file indicato in “aPercorso”.
Restituisce lo stream su cui scrivere.
FileStream OpenRead (string aPercorso)
Apre un file binario in SOLA lettura.
Restituisce lo stream da cui leggere
FileStream OpenWrite (string aPercorso)
Apre un file binario in SOLA scrittura.
Restituisce lo stream su cui scrivere
Classe System.IO.Directory
E’ una classe statica che consente di eseguire diverse operazioni sulle cartelle.
DirectoryInfo CreateDirectory (string aPercorso)
Crea la cartella indicata in “aPercorso”, e tutte le cartelle intermedie.
“DirectoryInfo” è una classe contenente informazioni sulla cartella creata.
void Delete (string aPercorso, bool aRicorsiva)
Elimina la cartella indicata, comprese le sottocartelle se “aRicorsiva” è TRUE
bool Exists (string aPercorso)
Verifica l’esistenza della cartella specificata
void Move (string aSorgente, string aDestinazione)
Sposta la cartella “aSorgente” in “aDestinazione”
Sono tutte classi adibite allo scorrimento dei dati contenuti in un file.
Ogni volta che si ha conclusa un’operazione di lettura/scrittura occorre liberare le risorse utilizzate dall’istanza utilizzata,
chiamandone il metodo “Close()”.
Classe System.IO.BinaryReader
Consente di leggere il contenuto di un file binario.
Metodi principali:
void Close ()
Chiude lo stream e libera le risorse
bool ReadBoolean()
Legge un valore booleano
byte ReadByte()
Legge un byte
byte[] ReadBytes(int aNumero)
Legge il numero di bytes indicato
char ReadChar ()
Legge un char
char[] ReadChars (int aNumero)
Legge il numero di caratteri indicato
double ReadDouble()
Legge un numero double
Int16 ReadInt16 ()
Int32 ReadInt32 ()
Int64 ReadInt64 ()
Legge un intero (a 16, 32 o 64 bit. Il tipo int corrisponde ad un Int32)
string ReadString ()
Legge una stringa
Classe System.IO.BinaryWriter
Consente di scriver in un file binario.
Metodi principali:
void Close ()
Chiude lo stream e libera le risorse
void Write(bool aValore)
Scrive un valore booleano
void Write(byte aValore)
Scrive un byte
void Write(byte[] aValore)
Scrive un array di bytes
void Write(char aValore)
Scrive un char
void Write(char[] aValore)
Scrive un array di char
void Write(double aValore)
Scrive un numero double
void Write(int aValore)
Scrive un numero a 32 bit
void Write(long aValore)
Scrive un numero a 64 bit
void WriteString (string aValore)
Scrive una stringa
Classe System.IO.StreamReader
Consente di leggere il contenuto di un file testuale
Metodi principali:
void Close ()
Chiude lo stream e libera le risorse
string ReadLine ()
Legge una riga intera dal file
string ReadToEnd ()
Legge tutto il contenuto del file dalla posizione corrente fino alla fine
Classe System.IO.StreamWriter
Consente di leggere il contenuto di un file testuale
Metodi principali:
void Close ()
Chiude lo stream e libera le risorse
void Write(bool aValore)
Scrive un valore booleano
void Write(byte aValore)
Scrive un byte
void Write(byte[]aValore)
Scrive un array di bytes
void Write(char aValore)
Scrive un char
void Write(char[]aValore)
Scrive un array di char
void Write(double aValore)
Scrive un numero double
void Write(int aValore)
Scrive un numero a 32 bit
void Write(long aValore)
Scrive un numero a 64 bit
void WriteString (string aValore)
Scrive una stringa
void WriteLine (string aValore)
Scrive il testo specificato e inizia una nuova riga
Esempio di lettura/scrittura con un file TESTUALE
// Creazione del file e scrittura
public class Program
{
public static void Main()
{
// Creazione file
StreamWriter sw = File.CreateText("c:\\test.txt");
// Scrittura righe
sw.WriteLine("Prima riga");
sw.WriteLine("Seconda riga");
// Chiusura file
sw.Close();
Console.WriteLine("File creato con successo!");
}
}
// Lettura contenuti
public class Program
{
public static void Main()
{
// Apertura file
StreamReader sr = File.OpenText("c:\\test.txt");
// Lettura di tutte le righe presenti
string testo = sr.ReadLine();
while(testo != null)
{
Console.WriteLine(testo);
testo = sr.ReadLine();
}
// Chiusura file
sr.Close();
Console.WriteLine("File letto con successo!");
}
}
// Accodamento contenuti
public class Program
{
public static void Main()
{
// Apertura file
StreamWriter sw = File.AppendText("C:\\test.txt");
// Accodamento nuovo testo
sw.WriteLine("Questa linea è stata accodata");
// Chiusura file
sw.Close();
Console.WriteLine("Accodamento testo riuscito!");
}
}
Esempio di lettura/scrittura con un file BINARIO
// Scrittura binaria
public class Program
{
public static void Main()
{
// Apertura file in scrittura
FileStream fs = File.Create("c:\\test.bin");
BinaryWriter bw = new BinaryWriter(fs);
// Preparazione dati da scrivere
int varIntero = 10;
double varDouble = 1500.34;
string varString = "Ciao Mondo!";
// Scrittura dati
bw.Write(10);
bw.Write(varDouble);
bw.Write(varString);
// Chiusura file
bw.Close();
fs.Close();
Console.WriteLine("Scrittura binaria riuscita!");
}
}
// Lettura binaria
public class Program
{
public static void Main()
{
// Apertura file in lettura
FileStream fs = File.OpenRead(“C:\\test.bin”);
BinaryReader br = new BinaryReader(fs);
// Lettura contenuti
Console.WriteLine(br.ReadInt32());
Console.WriteLine(br.ReadDouble());
Console.WriteLine(br.ReadString());
// Chiusura file
br.Close();
fs.Close();
Console.WriteLine("Lettura binaria riuscita!");
}
}