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();
}
...