Linguaggio:
|
|
|
|
Framework:
|
|
|
|
|
|
Controlli:
|
|
|
|
Win32 Avanzato:
|
|
|
|
|
ADO.NET:
|
|
|
|
ASP.NET:
|
|
|
|
Files, Directories, Streams
|
Domande
|
Files, Directories e Streams
Il framework .Net gestisce file e directory con le classi File
e Directory. Esse hanno tutti i metodi statici e, su di essi
compiono tutte le verifiche di sicurezza, pertanto il loro uso intensivo puo'
appesantire le prestazioni. Per un uso frequente e' consigliato usare altre due
classi che sono istanziabili: FileInfo e DirectoryInfo.
La classe File espone le seguenti categorie di metodi: Copy,
Delete, Exists, Move. Esse creano, cancellano, testano l'esistenza e
spostano file. GetAttributes, SetAttributes, GetCreationTime,
SetCreationTime, GetLastAccessTime, SetLastAccessTime, GetLastWriteTime,
SetLastWriteTime reperiscono ed impostano attributi vari. Create,
CreateText, Open, OpenRead, OpenText, OpenWrite si occupano della
creazione o apertura di file in varie modalita'.
Per quanto riguarda la classe Directory, i metodi CreateDirectory,
Delete, Exists, Move creano, cancellano, testano l'esistenza e
spostano directory. GetFiles ottiene tutti i file contenuti in
una directory. GetDirectories ottiene tutti le directory
contenute in una directory. GetLogicalDrives ottiene la lista
di drive disponibili. GetCurrentDirectory restituisce la
directory corrente.
Per lavorare con i file, dobbiamo tener presente che come al solito esistono
due diversi tipi di file: i file di testo e quelli binari. La loro apertura
puo' seguire un processo comune, cioe' l'utilizzo della classe FileStream.
I costruttori di questa classe prendono i parametri necessari per l'apertura,
quali il percorso, il modo di apertura, tipo
di accesso, tipo di condivisione.
Il costruttore FileStream ci fornisce un'oggetto che,
generalizzando, e' uno Stream. Esso puo' quindi essere passato
ad uno di due diversi altri tipi di classi a seconda che si lavori in binario o
in text. Per lavorare con un file di testo, dopo averlo individuato con FileStream,
usiamo le classi StreamReader e StreamWriter.
Per lavorare con un file binario usiamo, invece, le classi BinaryReader
e BinaryWriter. Tra i loro costruttori, ne esiste uno che
prende appunto uno Stream.
Questo, appena presentato, e' il metodo che permette di controllare
maggiormente l'interfacciamento ai file. Ma, se volete, di tecniche ne esistono
moltissime. Basti pensare ai metodi della classe File che gia'
inglobano l'utilizzo del FileStream e forniscono metodi di
apertura predefiniti come: Create, CreateText, Open, OpenRead, OpenText,
OpenWrite. Questi metodi ci forniscono lo Stream voluto
che poi passeremo a StreamReafer, StreamWriter, BinaryReader, BinaryWriter.
Ricapitoliamo con un paio di esempi. Mi rifersco ad un Form che
contiene tre pulsanti btnLeggi, btnScrivi,
btnLeggiScriviBin ed una TextBox Multiline.
Lavorare con i file di Testo
I seguenti gestori di eventi click si occupano di un file di testo. L'evento
"Scrivi" crea il file di testo dati.txt e lo passa ad uno StreamWriter
che ci scrive dentro dieci numeri casuali, uno per riga. L'evento "Leggi" apre
lo stesso file in lettura ed iterando cerca il numero massimo per poi
visualizzarlo. Notate l'utilizzo dei metodi WriteLine, ReadLine
e Peek, essi appartengono agli StreamXXX.
Private Sub btnScrivi_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnScrivi.Click
Dim rnd As New Random(), i As Integer
Dim fs As New FileStream("dati.txt", FileMode.Create)
Dim s As New StreamWriter(fs)
For i = 1 To 10
s.WriteLine(rnd.Next(1, 100))
Next
s.Close()
End Sub
Private Sub btnLeggi_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnLeggi.Click
Dim fs As New FileStream("dati.txt", FileMode.Open)
Dim s As New StreamReader(fs)
Dim max As Integer = -1, line As String, txt As String
txt = ""
While s.Peek() <> -1
line = s.ReadLine()
txt = txt & line & vbCrLf
If CInt(line) > max Then max = CInt(line)
End While
s.Close()
TextBox1.Text = txt
MessageBox.Show("Massimo = " & max)
End Sub
Lavorare con i file di Binari
Una volta creato uno Stream con FileStream,
possiamo darlo in pasto contemporaneamente sia al BinaryReader
che al BinaryWriter. Abbiamo cosi' un file ad accesso casuale,
dove poter leggere e scrivere. Il seguente gestore di evento crea un file
binario dati.bin, ci scrive dentro dieci numeri "interi" (che occupano
4 byte ciascuno), li rilegge tutti visualzziandoli nella TextBox1, quindi
rilegge e visualizza quelli di posizione dispari e poi quelli di posizione pari. Lo
spostamento all'interno del file avviene con il metodo Seek del
Writer. La scrittura si opera con una semplice Write.
Per la lettura e' importante notare che, poiche' esistono differenti tipi di
variabili e quindi differenti dimensioni di allocazione, abbiamo tanti metodi
quanti sono i tipi di variabili da poter leggere. Noi usiamo, ad esempio, ReadInt32
perche' sappiamo che un intero occupa 4 byte.
Private Sub btnLeggiScriviBin_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnLeggiScriviBin.Click
Dim rnd As New Random(), i As Integer
Dim fs As New FileStream("dati.bin", FileMode.Create)
Dim bw As New BinaryWriter(fs)
Dim br As New BinaryReader(fs)
For i = 1 To 10
bw.Write(rnd.Next(1, 100))
Next
Dim txt As String = "", n As Integer
txt = txt & "Tutti" & vbCrLf
bw.Seek(0, SeekOrigin.Begin)
For i = 1 To 10
n = br.ReadInt32()
txt = txt & CStr(n) & vbCrLf
Next
txt = txt & "posizione dispari" & vbCrLf
For i = 1 To 10 Step 2
bw.Seek((i - 1) * 4, SeekOrigin.Begin)
n = br.ReadInt32()
txt = txt & CStr(n) & vbCrLf
Next
txt = txt & "posizione pari" & vbCrLf
For i = 2 To 10 Step 2
bw.Seek((i - 1) * 4, SeekOrigin.Begin)
n = br.ReadInt32()
txt = txt & CStr(n) & vbCrLf
Next
TextBox1.Text = txt
bw.Close()
br.Close()
End Sub
End Class
Ultimo aggiornamento 13/01/2004
|
|