Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1909, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Scrivere una struttura in un file binario in VB 2005

Stavo veramente impazzendo.. avevo bisogno di scrivere il contenuto di una struttura in un file binario ma le varie metodologie esposte da .NET 2.0 (FileStream, BinaryWriter, namespace My) limitano la scrittura in un file binario dei soli tipi di dato della libreria di classi base.

Non volevo "arrendermi" all'idea di dover utilizzare i vecchi metodi FileOpen, FilePut, FileClose.. retaggio di VB 6 sapendo di avere a disposizione l'immensa potenza del Framework. Così tra vari "googling", ho trovato una soluzione nel forum di MSDN dedicato a VB: serializzare la struttura e scrivere l'oggetto nel file binario.

Di seguito riporto il codice da me riadattato e semplificato, che scrive in un file binario una semplicissima struttura chiamata Software e che contiene alcune informazioni su un ipotetico programma informatico:

Module Module1

<Serializable()> Structure Software

Dim nomeProgramma As String

Dim annoProduzione As Short

Dim nomeProduttore As String

End Structure

Sub CreaFileBinario()

Dim Programma As Software

Programma.nomeProduttore = "Microsoft"

Programma.nomeProgramma = "Windows XP"

Programma.annoProduzione = 2002

' Ottiene un oggetto BinaryFormatter e crea un nuovo MemoryStream, a cui associa il BinaryFormatter, quindi scrive il contenuto nel file binario tramite My

Dim BF As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()

Dim MS As New System.IO.MemoryStream()

'La serializzazione avviene dapprima in memoria, quindi riversata nel file binario

BF.Serialize(MS, Programma)

My.Computer.FileSystem.WriteAllBytes("c:\temp\programmi.bin", MS.GetBuffer(), False)

' Verifica in lettura la corretta serializzazione e ne mostra il contenuto nella finestra della console

Dim bytes As Byte() = My.Computer.FileSystem.ReadAllBytes("c:\temp\programmi.bin")

Programma = DirectCast(BF.Deserialize(New System.IO.MemoryStream(bytes)), Software)

Console.WriteLine(Programma.nomeProgramma + " è stato prodotto da " + Programma.nomeProduttore + " nell'anno " + Programma.annoProduzione.ToString)

Console.ReadLine()

End Sub

Sub Main()

CreaFileBinario()

End Sub

End Module

Funziona.. Visto così, in modo molto semplice, la questione può sembrare di scarsa utilità però se tenete conto che una struttura può contenere di tutto, anche streams..allora la cosa assume una certa rilevanza.

Tra l'altro sembra che il metodo della serializzazione offra anche ragguardevoli prestazioni in tema di velocità. Spero che questo possa esservi utile.

Alessandro

Print | posted on martedì 28 novembre 2006 01:36 | Filed Under [ .NET Framework Visual Basic ]

Powered by:
Powered By Subtext Powered By ASP.NET