Ficheros binarios
Suelen ser ficheros de imágenes, audio, video, etc.
... BinaryReader fichero; string nombre; byte unDato; ... try { fichero = new BinaryReader(File.Open(nombre, FileMode.Open)); unDato = fichero.ReadByte(); fichero.Close(); } ...
Con un fichero binario podemos leer cualquier tipo de dato:
- ReadInt32: lee un int.
- ReadSingle: lee un float.
- ReadString: lee una cadena.
Lectura de bloques de datos de un fichero binario.
... FileStream fichero; string nombre; byte[] datos; int cantidadLeida; ... try { fichero = File.OpenRead (nombre); datos = new byte[10]; int posicion = 0; int cantidadALeer = 10; cantidadLeida = fichero.read(datos, posicion, cantidadALeer); ... fichero.Close(); } ...
La posición en el fichero
FileStream fichero; ... try { ... if (fichero.Lenght>30) { fichero.Seek(19, SeekOrigin.Begin); int nuevoDato = fichero.ReadByte(); Console.WriteLine("El byte 20 es un {0}",nuevoDato); Console.WriteLine("La posición actual es {0}",fichero.Position); ... } ... fichero.Close();
Existe una propiedad CanSeek que nos permite saber si el fichero permite que nos movamos utilizando el método Seek.
Escribir en un fichero binario
... fichero = File.OpenWrite(nombre); fichero.Seek(0,SeekOrigin.End); fichero.Write(datos,0, TAMANYO_BUFFER); ... // Modificamos el 3º byte fichero.Seek(2,SeekOrigin.Begin); fichero.WriteByte(99); fichero.Close(); ...
Existe la propiedad CanWrite que nos permite saber si se puede escribir en el archivo.
Si queremos escribir datos de distinto tipo al Byte podemos utilizar:
- Write simplemente, no existe WriteString, WriteByte, WriteInt32, …
... BinaryReader ficheroEntrada; ... try { ficheroEntrada = new BinaryReader(File.Open(nombre, FileMode.Open)); ... ficheroEntrada.BaseStream.Seek(1,SeekOrigin.Begin); ... }
FileMode:
- CreateNew: Crea un archivo nuevo pero si existe genera una excepción IOException.
- Create. Crea un archivo nuevo pero si ya existe se sobreescribe.
- Open. Abrir un archivo existente. Sino existiera genera una excepción System,IO.FileNotFoundException.
- OpenOrCreate. Abrir el archivo si existe, y sino existe se crea.
- Truncate. Abre un archivo existente y deja su tamaño a 0.
- Append. Abre el archivo y se coloca al final del mismo, sino existe lo crea.
Leer y escribir en un mismo fichero binario.
Utilizando el objeto FileStream, tiene un método llamado “Open” al que podemos indicarle el modo de apertura (FileMode) y el modo de acceso (FileAccess.Read, FileAccess.Write, o FileAccess.ReadWrite).
... FileStream fichero; string nombre; byte[] datos; ... try { fichero = File.Open(nombre, FileMode.Open,FileAccess.ReadWrite); ... fichero.Close(); } ...