1) Open e Create non sono superflue. Cosa credi che utilizzi il costruttore di StreamReader o StreamWriter per aprire o creare un file? Proprio quelle. Inoltre i reader e i writer non sono classi che rappresentano uno stream, ma piuttosto un mezzo per leggere/scrivere particolari tipi di file, ossia file testuali. E lo stesso vale per BinaryWriter e BinaryReader. La classe che per eccellenza rappresenta un file è FileStream, mentre Stream rappresenta un generico stream di dati.
2) La Close non è tecnicamente necessaria, poiché quando un programma viene chiuso, anche tutti i descrittori dei file usati vengono deallocati, tuttavia è molto scorretto non usarla, perché nessuno assicura cosa potrebbe succedere durante la vita di un programma. Ad esempio, un altro processo potrebbe tentare di accedere al file e fallire perché ti sei dimenticato di chiuderlo.
Il file viene scritto anche alla chiusura, ma non solo. Puoi forzare la scrittura dei dati dal buffer sul disco usando Flush().
3) Il formato più semplice è il csv, o in alternativa file a spaziatura fissa, ma io preferisco il primo metodo (non in assoluto, ci sono strade molto migliori per fare questo). E' consigliabile portare tutti i dati in un array e poi lavorarci sopra. L'accesso al disco, ancorché l'esistenza dei buffer permetta di limitarlo, è molto più lento di un accesso in memoria centrale.
|