lezione aspnet
DESCRIPTION
Lezione aspnetTRANSCRIPT
1
Rifare il programma dell’ordinamento dei numeri ma con interfaccia windows:
Textbox in cui scrivere un numeroButton per trasferirlo in una listboxButton per avere l’ordinamento visualizzato in un’altra listbox
2
C# - Leggere e scrivere File
Simona Colombo04 giugno 2012
3
Leggere e scrivere file sono due operazioni tipiche in applicazioni che operano nel mondo reale e quindi sapere come gestire flussi di dati
(stream) è un aspetto fondamentale per ogni programmatore.
Gli stream sono lo strumento migliore per gestire sia l’accesso sequenziale che l’accesso casuale ai dati all’interno del .NET
Framework e derivano da una classe base astratta che fornisce l’interfaccia e l’implementazione base per tutti i tipi di stream del
Framework.
Sono diverse le classi che prendono parte al processo di lettura e scrittura di file. Fondamentale in tale contesto è la classe File, che espone diversi metodi statici per l’apertura e la creazione di
file, permettendo diversi tipi di operazioni:Lettura e scrittura dei contenuti di fileOperazioni di gestione di file in lettura
Operazioni di gestione di file in scritturaSemplici operazioni su file (tipo controllo di esistenza o
cancellazione)
4
Quando un file viene aperto o creato la classe File può restituire diversi tipi di oggetti. Il più semplice di essi è l’oggetto FileStream, che rappresenta un
file nel file system. Altri oggetti che è possibile ottenere dalla classe File sono StreamReader e StreamWriter, che consentono la lettura e la
scrittura sequenziale in uno stream.
Open – Apre un file esistente e ritorna un oggetto FileStreamOpenRead - Apre un file esistente e ritorna un oggetto FileStream in sola letturaOpenText - Apre un file esistente e ritorna un oggetto StreamReaderOpenWrite - Apre un file esistente per la scrittura e ritorna un oggetto StreamWriterReadAllBytes – Apre un file, legge il contenuto ponendolo in un array di byte e chiude il fileReadAllLines - Apre un file, legge il contenuto ponendolo in un array di stringhe (una per riga di dati) e chiude il fileReadAllText - Apre un file, legge il contenuto ponendolo in una stringa e chiude il fileWriteAllBytes – Apre un file, scrive in esso i dati contenuti in un array di byte (sovrascrivendo eventuali dati esistenti) e chiude il fileWriteAllLines - Apre un file, scrive in esso i dati contenuti in un array di stringhe (sovrascrivendo eventuali dati esistenti) e chiude il fileWriteAllText - Apre un file, scrive in esso i dati contenuti in una stringa (sovrascrivendo eventuali dati esistenti) e chiude il file
5
Classe FileStream
La classe FileStream fornisce le funzionalità di base per la gestione in lettura e scrittura di stream contenuti in file; la classe in oggetto dispone delle seguenti proprietà e metodi:
ProprietàCanRead – Determina se lo stream supporta le operazioni di letturaCanTimeout – Determina se lo stream può generare o meno eventi di timeoutCanWrite – Determina se lo stream supporta le operazioni di scritturaLenght – Restituisce la lunghezza in byte dello streamName – Restituisce il nome del filePosition – Restituisce o permette di impostare la posizione di un cursore virtuale all’interno dello streamReadTimeout – Permette di impostare il valore di timeout per le operazioni di letturaWriteTimeout – Permette di impostare il valore di timeout per le operazioni di scrittura
MetodiClose – Chiude lo stream e rilascia tutte le risorse ad esso associateFlush – Svuota i buffer all’interno dello stream e forza la scrittura delle modificheLock – Blocca l’azione di altri processi che tentano di modificare il fileRead – Esegue una lettura sequenziale di uno specifico numero di byteReadByte – Esegue la lettura di un singolo byteSeek – Imposta la posizione all’interno del fileWrite – Scrive le informazioni sullo stream
6
Classe StreamReader
La classe StreamReader fornisce le funzionalità di base per leggere dati dalla classe derivata Stream e, oltre ai metodi di citati
per le classi precedenti, espone alcune utili proprietà:
BaseStream – Restituisce lo stream attualmente in lettura
CurrentEncoding – Restituisce la codifica utilizzata
EndOfStream – Determina il lettore è giunto alla fine dello stream
7
Andiamo allora a vedere come aprire innanzitutto un file: i metodi sono più che altro 2, in base a come abbiamo precedentemente
organizzato il codice.
utilizzare la classe statica File
FileStream stream = File.Open(@"C:testtext.txt", FileMode.Open);StreamReader reader = new StreamReader(stream);Console.WriteLine(reader.ReadToEnd());reader.Close();
8
• La classe statica File permette le operazioni sui file
• Verificare che un file esiste:
File.Exists(FILE_NAME);
• FileStream permette di accedere o creare un file:
FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.ReadWrite);
• Sempre chiudere il file al termine delle operazioni o le modifiche potrebbero andare perse:
fs.Close();
Operazioni su file
9
Scrivere e leggere su fileStreamWriter sr = new StreamWriter(fs);
sr.Write(text);
sr.Close();
StreamReader sr = new StreamReader("test.txt");
string res = sr.ReadLine();
sr.Close();
Prende come parametro uno Stream o il nome del file
Esistono varie modalità di scrittura
Analogo al Writer
10
Scrivere e leggere su file
• Attenzione a gestire le numerose eccezioni che possono essere sollevate
• Si può eseguire operazioni anche in file binario (BinaryWriter e BinaryReader)
• Esistono molte variazioni sul tema
11
La classe File supporta anche la lettura di un intero file con una singola chiamata
Console.WriteLine(File.ReadAllText(@"C:\Prova.txt"));
Il seguente esempio mostra come ricercare all’interno di un file una stringa particolare ('Vincenzo'), terminando la lettura in caso di sua individuazione
StreamReader rdr = File.OpenText(@"C:\Prova.txt");
while(!rdr.EndOfStream) { string line = rdr.ReadLine();
if (line.Contains("Vincenzo")) { Console.WriteLine("Trovato il file:"); Console.WriteLine(line); break; } } rdr.Close();
12
Adesso vediamo come fare per scrivere dati su un file. Per effettuare questa operazione occorre utilizzare la classe File per creare uno stream specificando il percorso del file come mostrato nel seguente esempio
FileStream testFile = File.Create(@"c:\Prova.txt");
Il metodo File.Create crea un nuovo file legato ad un oggetto FileStream da utilizzare per effettuare la scrittura di dati in esso. Per effettuare tale operazione è opportuno utilizzare la classe
StreamWriterStreamWriter writer = new StreamWriter(testFile); writer.WriteLine("Ciao"); writer.Close(); testFile.Close();
13
Gli esempi mostrati determinano la creazione di un nuovo file ma è possibile ovviamente effettuare operazioni di scrittura su file esistenti tramite il metodo File.Open
FileStream testFile = File.Open(@"c:\Prova.txt",FileMode.Open, FileAccess.Write);
o utilizzando il metodo File.OpenWrite
FileStream testFile = File.Open(@"c:\Prova.txt");
Chiaramente gli ultimi due metodi funzionano solo se il file specificato esiste, quindi è opportuno nel vostro codice eventualmente accertarsi della sua esistenza.
14
Esercizio:
Creazione dell'interfaccia per giocare a tris a due giocatori, con salvataggio risultati su un
File e pubblicazione a video dei punteggi.
Provare a fare un giocatore contro il computer...