domingo, 14 de diciembre de 2008

PROYECTO

Proyecto de manejo de datos de Archivos [Inscripción de Alumnos en Cursos]

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication1
{
//Curso
class Curso
{
string sigla, descripcion;
int creditos;

public Curso(string s, string d, int c)
{
sigla = s.ToUpper(); descripcion = d.ToUpper(); creditos = c;
}
public string Sigla
{
get
{
return (sigla);
}
}
public string Descropcion
{
get
{
return (descripcion);
}
}
public int Creditos
{
get
{
return (creditos);
}
}
}
}
class ListaCursos
{
Curso[] cursos; //Almacena la lista de cursos
int cantidad = 0;
const int MAX = 20; //Limitacion: 20 cursos maximo
string archivo = "C:\\Archivos\\cursos.dat";

//Constructor: dimensiona la lista de alumnos en MAX
public ListaCursos()
{
cursos = new Curso[MAX]; //Limitacion: 20 cursos maximo
}

//Constructor: dimensiona la lista de cursos en MAX y carga
//los datos de archivo identificado por su nombre
public ListaCursos(string Filename)
{
StreamReader fr;
cursos = new Curso[MAX];
archivo = Filename;

try
{
fr = new StreamReader(archivo);
}
catch (Exception e)
{
//No se pudo abrir: se crea
StreamWriter sw = new StreamWriter(archivo);
sw.Close();
return;
}
string linea;
linea = fr.ReadLine();
while (linea != null)
{
string[] datos = linea.Split();
//Formato del archivo tiene: creditos sigla descripcion
Agregar(datos[1].ToUpper(), datos[2].ToUpper(), int.Parse(datos[0]));
linea = fr.ReadLine();
}
fr.Close();
}

//Guardar(): guarda datos en estructura al archivo identificado por su nombre
public bool Guardar()
{
StreamWriter fw;
try
{
fw = new StreamWriter(archivo);
}
catch (Exception e)
{
Console.WriteLine("Error en la apertura de \"{0}\": {1}", archivo, e.ToString());
return (false);
}
for (int i = 0; i < cantidad; i++)
fw.WriteLine("{0} {1} {2}", cursos[i].Creditos, cursos[i].Sigla, cursos[i].Descropcion);
fw.Close();
return (true);
}
//Agregar(): agrega un curso dado a la lista
//Prametros: Curso, c, el curso a agregar
public void Agregar(Curso c)
{
if (cantidad < MAX) cursos[cantidad++] = c;
}
//Agregar(): agrega un curso dados sus datos, a ña ñista
//Parametros: la sigla, la descripcion y los creditos
public void Agregar(string s, string d, int c)
{
if (cantidad < MAX)
{
cursos[cantidad++] = new Curso(s, d, c);
}
}
//Atributo Cantidad, solo lectura, no se puede modificar por fuera
public int Cantidad
{
get
{
return (cantidad);
}
}
//Mostrar(): muestra los datos registrados al momento
public void Mostrar()
{
Console.WriteLine("\nCURSOS:");
for (int i = 0; i < cantidad; i++)
Console.WriteLine("{0} {1} {2}", cursos[i].Creditos, cursos[i].Sigla, cursos[i].Descropcion);
Console.WriteLine("------------------------------------------------------------------------\n");
}
//Buscar(): Busca curso definido por sigla. Retorna la posicion, -1 si no esta.
public int Buscar(string sigla)
{
for (int i = 0; i < cantidad; i++)
if (cursos[i].Sigla == sigla.ToUpper())
return (i);
return (-1); //Si llego aqui, no lo encontro
}
//GetCurso(): Entrega curso ubicado en la posicion n del arreglo, con n de 0.. N-1
public Curso GetCursos(int n)
{
return (cursos[n]);
}

}
}
//Clase Alumno: representa un alumno con sus atributos basicos
class Alumno
{
string nombre, apellido;
string fechanac;
int numero;
public Alumno(int num, string n, string a, string f)
{
numero = num; nombre = n.ToUpper(); apellido = a.ToUpper(); fechanac = f;
}
public string Nombre
{
get
{
return (nombre);
}
}
public string Apellido
{
get
{
return (apellido);
}
}
public string FechaNac
{
get
{
return (fechanac);
}
}
public int Numero
{
get
{
return (numero);
}
}

}
}
//Clase ListaAlumnos: representa un conjunto de alumnos
class ListaAlumnos
{
Alumno[] alumnos; //Almacena la lista de alumnos
int cantidad = 0;
const int MAX = 20; //Limitacion: 20 alumnos maximo
string archivo = "C:\\Archivos\\alumnos.dat";

//Constructor: dimensiona la lista de alumnos en MAX
public ListaAlumnos()
{
alumnos = new Alumno[MAX];
}//Limitacion: 20 alumnos maximo

//Constructor: dimensiona la lista de alumnos en MAX
public ListaAlumnos(string Filename)
{
StreamReader fr;
alumnos = new Alumno[MAX];
archivo = Filename;
try
{
fr = new StreamReader(archivo);
}
catch (Exception e)
{
//No se pudo abrir, se crea
StreamWriter sw = new StreamWriter(archivo);
sw.Close();
return;
}
string linea;
linea = fr.ReadLine();
while (linea != null)
{
string[] datos = linea.Split();
//Formato del archivo tiene: num fecha nombre apellido
Agregar(int.Parse(datos[10]), datos[2], datos[3], datos[1]);
linea = fr.ReadLine();
}
fr.Close();
}

//Guardar():Guarda datos en la estructura al archivo identificado por su nombre

public bool Guardar()
{
StreamWriter fw;
try
{
fw = new StreamWriter(archivo);
}
catch (Exception e)
{
Console.WriteLine("Error en la apertura de \"{0}\": {1}", archivo, e.ToString());
return(false);
}
for(int i = 0; i < cantidad; i++)
fw.WriteLine("{0} {1} {2} {3}",alumnos[i].Numero, alumnos[i].FechaNac, alumnos[i].Nombre, alumnos[i].Apellido);
fw.Close();
return(true);
}
//Agregar(): agrega un alumno dado a la lista
//Parametros: Alumno a, el alumno a agregar
public void Agregar(Alumno a)
{
if(cantidad < MAX) alumnos[cantidad++] = a;
}
//Agregar(): agrega un alumno dados sus datos, a la lista
//Parametros: el numero, nombre, apellido, y fecha nacimiento
public void Agregar(int num, string n, string a, string f)
{
if(cantidad < MAX)
{
alumnos[cantidad++] = new Alumno(num, n, a, f);
}
}
//Atributo Cantidad, solo lectura, no se puede modificar por fuera
public int Cantidad
{
get
{
return(cantidad);
}
}

//Mostrar(): muestra los datos registrados al momento
public void Mostrar()
{
Console.WriteLine("\nALUMNOS:");
for(int i = 0; i < cantidad; i++)
Console.WriteLine("{0} {1} {2} {3}", alumnos[i].Numero, alumnos[i].FechaNac, alumnos[i].Nombre, alumnos[i].Apellido);
Console.WriteLine("--------------------------------------------------------------------------------------------------------");
}

//Buscar(): Busca alumnos definido por numero, retorna posicion -1 si no esta
public int Buscar(int numero)
{
for(int i = 0; i < cantidad; i++)
if(alumnos[i].Numero == numero)
return(i);
return(-1); //Si llego aqui no lo encontro
}

//GetAlumno(): Entrega alumno ubicado en posicion n del arreglo, con n de 0.. N-1
public Alumno GetAlumno(int n)
{
return(alumnos[n]);
}
}
}
//Clase ListaInscripciones: representa un conjunto de inscripciones
class ListaInscripciones
{
Inscripcion[] inscripciones; //Almacena la lista de inscripciones
int cantidad = 0;
const int MAX = 60; //Limitacion: 60 inscripciones maximo
string archivo = "C:\\Archivos\\inscripciones.dat";

//Constructor: dimensiona la lista de inscripciones en MAX
public ListaInscripciones()
{
inscripciones = new Inscripcion[MAX];
}

//Constructor: dimensiona la lista de inscripciones en MAX
//y carga los datos de archivo identificado por su nombre
public ListaInscripciones(string Filename)
{
StreamReader fr;
inscripciones = new Inscripcion[MAX];
archivo = Filename;
try
{
fr = new StreamReader(archivo);
}
catch (Exception e)
{
//No se pudo abrir, se crea
StreamWriter sw = new StreamWriter(archivo);
sw.Close();
return;
}
string linea;
linea = fr.ReadLine();
while (linea != null)
{
string[] datos = linea.Split();
//Formato del archivo tiene: sigla numero semestre
Agregar(datos[0].ToUpper(), int.Parse(datos[1]), int.Parse(datos[2]));
linea = fr.ReadLine();
}
fr.Close();
}
//Guardar(): guarda datos en la estructura al archivo identificado por su nombre
public bool Guardar()
{
StreamWriter fw;
try
{
fw = new StreamWriter(archivo);
}
catch (Exception e)
{
Console.WriteLine("Error en la apertura de \"{0}\": {1}", archivo, e.ToString());
return (false);
}
for (int i = 0; i < cantidad; i++)
fw.WriteLine("{0} {1} {2}", inscripciones[i].Sigla, inscripciones[i].Numero, inscripciones[i].Semestre);
fw.Close();
return (true);
}
//Agregar(): agregar una inscripcion dada a la lista
//Parametros: Inscripcion i, el curso a agregar
public void Agregar(Inscripcion i)
{
if (cantidad < MAX) inscripciones[cantidad++] = i;
}
//Agregar(): agrega un curso dados sus dtos, a la lista
//Parametros: la sigla, la descripcion, y los creditos
public void Agregar(string s, int n, int m)
{
if (cantidad < MAX)
{
inscripciones[cantidad++] = new Inscripcion(s, n, m);
}
}
//Atributo Cantidad, solo lectura, no se puede modificar por fuera
public int Cantidad
{
get
{
return (cantidad);
}
}
//Mostrar(): muestra los datos registrados al momento
public void Mostrar(ListaAlumnos la, ListaCursos lc)
{
Console.WriteLine("\nINSCRIPCIONES:");
for (int i = 0; i < MAX; i++)
{
Alumno a; Curso c;
a = la.GetAlumno(la.Buscar(inscripciones[i].Numero));
c = lc.GetCursos(lc.Buscar(inscripciones[i].Sigla));
Console.WriteLine("{0} ({1}) - {2} ({3} {4}) en {5}", c.Sigla, c.Descropcion, a.Numero, a.Nombre, a.Apellido, inscripciones[i].Semestre);
}
Console.WriteLine("-----------------------------------------------------------------------------------------------------------------------------");
}
}
}
//Clase MainApp: bloqu del algoritmo principal y metodos auxiliares
class MainApp
{
//ValidarFecha(): valida una fecha en formato ddmmaaaa
static bool ValidarFecha(string fecha)
{
string digitos = "0123456789";
if (fecha.Length != 8) return (false);
for (int i = 0; i < fecha.Length; i++)
if (digitos.IndexOf(fecha[i]) < 0) return (false);
if (int.Parse(fecha.Substring(0, 2)) > 31) return (false);
if (int.Parse(fecha.Substring(0, 2)) == 0) return (false);
if (int.Parse(fecha.Substring(2, 2)) > 12) return (false);
if (int.Parse(fecha.Substring(2, 2)) == 0) return (false);
return (true);
}
static Alumno NuevoAlumno()
{
string nombre, apellido, fechanac;
int numero;
Console.WriteLine("Datos del nuevo alumno");
Console.Write("Nombre:"); nombre = Console.ReadLine();
Console.Write("Apellido:"); apellido = Console.ReadLine();
do
{
Console.Write("Fecha Nac (ddmmaaaa): ");
fechanac = Console.ReadLine();
}
while (!ValidarFecha(fechanac));
Console.Write("Numero: "); numero = int.Parse(Console.ReadLine());
return (new Alumno(numero, nombre, apellido, fechanac));
}
static Curso NuevoCurso()
{
string sigla, descripcion;
int creditos;
Console.WriteLine("Datos del nuevo curso");
Console.Write("Sigla: "); sigla = Console.ReadLine();
Console.Write("Descripcion: "); descripcion = Console.ReadLine();
Console.Write("Creditos: "); creditos = int.Parse(Console.ReadLine());
return (new Curso(sigla, descripcion, creditos));
}
//NuevaInscripcion(): crea una nueva inscripcion relacionando un alumno existente
//con un curso que tambien debe ser existente
//Observaciones: se le pide al usuario solo el numero del alumno y la sigla del curso
//validando que ambis existan
static Inscripcion NuevaInscripcion(ListaAlumnos la, ListaCursos lc)
{
string sigla;
int numero, semestre;
Alumno a; Curso c;
//Muestra la lista en pantalla para ayudar al usuario a indicar datos
la.Mostrar(); lc.Mostrar();
Console.WriteLine("Inscripcion de Curso:");
do
{
Console.Write("Numero del Alumno: ");
numero = int.Parse(Console.ReadLine());
}
while (la.Buscar(numero) < 0);
do
{
Console.Write("Sigla Curso: ");
sigla = Console.ReadLine();
}
while (lc.Buscar(sigla) < 0);
Console.Write("Semestre: "); semestre = int.Parse(Console.ReadLine());
a = la.GetAlumno(la.Buscar(numero)); c = lc.GetCursos(lc.Buscar(sigla));
Console.WriteLine("El alumno {0} {1} se inscribio en el curso {2} ({3})", a.Nombre, a.Apellido, c.Sigla, c.Descropcion);
return (new Inscripcion(sigla, numero, semestre));
}
static int Menu(string[] opciones)
{
int contador = 1, op = 0;
foreach (string opcion in opciones)
Console.WriteLine("{0}) {1}", contador++, opcion);
Console.Write("Ingrese su opcion: ");
do
op = int.Parse(Console.ReadLine());
while (op <= 0 && op >= contador);
return (op);
}
static void Main ()
{
string[] opciones = { "Agregar Alumno", "Agregar Curso", "Inscribir en Curso", "Mostrar Alumnos", "Mostrar Cursos", "Mostrar Inscripciones", "Salir" };
int opcion = 0;
const string archivocursos = "C:\\Archivos\\cursos.dat";
const string archivoalumnos = "C:\\Archivos\\alumnos.dat";
const string archivoinscripciones = "C:\\Archivos\\inscripciones.dat";
ListaCursos lc = new ListaCursos(archivocursos);
ListaAlumnos la = new ListaAlumnos(archivoalumnos);
ListaInscripciones li = new ListaInscripciones(archivoinscripciones);
do
{
opcion = Menu(opciones);
switch (opcion)
{
case 1: la.Agregar(NuevoAlumno()); break;
case 2: lc.Agregar(NuevoCurso()); break;
case 3: li.Agregar(NuevaInscripcion(la,lc)); break;
case 4: la.Mostrar(); break;
case 5: lc.Mostrar(); break;
case 6: li.Mostrar(la, lc); break;
}
}
while (opcion != 7);
lc.Guardar();
la.Guardar();
li.Guardar();
}
}
}



sábado, 13 de diciembre de 2008

Resumen [FLUJOS]

Sabemos que la comunicación entre un programa y el origen o el destino de cierta información, se realiza mediante un flujo de información(Stream) que no es más que un objeto que hace de intermediario entre el programa, y el origen o el destino de la información.
Este nivel de abstracción hace que un programa no tenga que saber nada del dispositivo, lo que se traduce en una facilidad más a la hora de escribir programas, ya que los algoritmos para leer y escribir datos serán siempre más o menos los mismos.
(System.IO) de la biblioteca .NET contiene una colección de clases que soportan estos algortimos.
(FileStream) subclase de Stream permite escribir o leer datos de un fichero.
(StreamWriter y StreamReader) subclases de TextWriter y TextReader, permiten escribir y leer los caracteres.
(BinaryReader y BinaryWriter) permiten leer y escribir datos de cualquier tipo primitivo en binario y cadenas de caracteres.

ABRIENDO FICHEROS PARA ACCESO SECUENCIAL

El tipo de acceso a un fichero de datos es secuencial. Un fichero abierto para "acceso secuencial" es un fichero que puede almacenar resgistros de cualquier longitud. Cuando la información se escribe resgistro a resgitro, estos son colocados uno a continuación de otro, y cuando se lee, se empieza por el primer registro y se continúa al siguiente hasta alcanzar el final.
Este tipo de acceso se utiliza con ficeros de texto en los que se escribe toda la información desde el principio hasta el final y se lee de la misma forma. Los ficheros de texto no son apropiados para almacenar grandes series de números, porque cada número es almacenado como una secuencia de bytes.

Flujos de bytes

Los datos pueden ser escritos o lídos de un fichero byte a byte utilizando un flujo de la clase "FileStream"

FileStream
Un flujo de la clase FileStream perimte leer y escribir bytes en un fichero.

FileStream(string nombre, FileMode modo)
FileStream(string nombre, FileMode modo, FileAccess acceso)

El primer constructor abre un flujo de entrada y salida (para leer y escribir), el segundo hace lo mismo, pero con la posibilidad de especificar el tipo de acceso (leer, escribir, o leer y escribir).
Ele parametro "nombre" es una cadena de caracteres que especifica la ruta donde está guardado o se guardará el fichero.

"C:\\temp\\doc.txt"
@"C:\\temp\\doc.txt"

El parámetro "modo", del tipo enumerado FileMode, puede tomar uno de los valores siguientes:

CreateNew Crear un nuevo fichero.
Create Crear fichero. Si el fichero existe será sobreescrito.
Open Abrir un fichero existente.
OpenOrCreate Abrir un fichero si existe; si no, se crea un nuevo fichero.
Truncate Abrir un fichero existente.Una vez abierto, el fichero será truncado a cero bytes de longitud.
Append Abrir un fichero para añadir datos al final del mismo si existe, o crear un nuevo fichero si no existe.

El parámetro "acceso", del tipo FileAccess, puede tomar uno de lo siguientes valores:
Read Permite acceder al fichero para realizar operaciones de lectura.

ReadWrite Permite acceder al fichero para realizar operaciones de lectura y escritura.

Write Permite acceder al fichero para realizar operaciones de escritura.

Tipos de caracteres

Los datos pueden ser escritos o leídos de un fichero carácter en un formato portable, utilizando flujos de las clases "StreamWriter y StreamReader", subclases de "TextWriter y TextReader".

StreamWriter

Un flujo de la clase StreamWriter permite escribir caracteres en un fichero.

StreamWriter(string nombre)
StreamWriter(Stream flujo)

El primer constructor abre un flujo de salida (para escribir) hacia el fichero especificado por "nombre" (ver la clase FileStream), mientras que el segundo hace lo mismo, pero desde otro flujo existente de la clase Stream o de sus derivadas.

Clases File, Directory y Path

Estas clases soportan la manipulación del nombre de un fichero o de un directorio que puede existir en el sistema de ficheros de la máquina, sus métodos permitirán interrogar al sistema sobre todas las características de ese fichero. Todos los métodos de estas clases son "static" para que puedan ser invocados sin necesidad de que exista un objeto de ellas.

"C:\\MiDir\\MiFichero.txt"
@"C:\\MiDir\MiFichero.txt"
@"C:\MiDir"
"MiDir\\MiSubDir\\MiFichero.txt"
@"MiDir\MiSubDir\MiFichero.txt"
@"MiDir\MiSubDir"
"MiFichero.txt"
"\\\\MiServidor\\MiDirCompartido\\MiFichero.txt"

Flujos de datos de tipos primitivos

Datos de tipos primitivos (Bool, Byte, Double, Float, Long, Int, Short, etc).
Para estos casos, el espacio de nombres "System.IO" proporciona las clases "BinaryReader y BinaryWriter", las cuales permiten leer y escribir, respectivamente, datos de cualquier tipo primitivo en formto binario, y cadenas de carácteres en formato "utf_8".
Un flujo BinaryReader sólo puede leer datos almacenados enun fichero a través de un flujo BinaryWriter.

BinaryWriter

Un flujo de la clase BinaryWriter perimte a una aplicación escribir datos de cualquier tipo primitivo. Se puede crear un flujo de esta clase utilizabdo el siguiente constructor:

BinaryWriter(Stream flujo)

Este constructor abre un flujo de salida (para escribir) hacia el fichero vinculado con otro flujo existente de la clase Stream o de sus derivadas.

BinaryReader

Un flujo de la clase BinaryReader, permite a una aplicación leer datos de cualquier tipo primitivo escritos por un flujo de la clase BinryWriter.

BinaryReader(Stream flujo)

Este constructor abre un flujo de entrada (para leer) desde el fichero vinculado con otro flujo existente de la clase Strem o de sus derivadas.

jueves, 11 de diciembre de 2008

Ejemplo 6

using System;
using System.IO;


public class MostrarListaTfnos
{
public static void mostrarFichero(String fichero)
{
BinaryReader br = null; //flujo entrada de datos
//desde el fichero
try
{
//Verificar si el fichero existe
if (File.Exists(fichero))
{
//Si existe, abrir un flujo desde el mismo para leer
br = new BinaryReader(new FileStream(fichero, FileMode.Open, FileAccess.Read));

//Declarar los datos a leer desde el fichero
String nombre, direccion;
long telefono;

do
{
//Leer un nombre, una direccion y un telefono desde el
//fichero. Cuando se alcance al final del fichro C#
//lanzara una excepcion del tipo EndOfStreamException.
nombre = br.ReadString();
direccion = br.ReadString();
telefono = br.ReadInt64();

//Mostrar los datos nombre, direccion, y telefono
Console.WriteLine(nombre);
Console.WriteLine(direccion);
Console.WriteLine(telefono);
Console.WriteLine();
}
while (true);

}

else
Console.WriteLine("El fichero no existe");

}
catch (EndOfStreamException)
{
Console.WriteLine("Fin del Listado");

}
finally
{
//Cerrar el flujo
if (br != null) br.Close();

}

}
public static void Main(string[] args)
{
try
{
if (args.Length == 0)
{
//Obtener el nombre del fichero
Console.Write("Nombre del fichero: ");
string nombreFichero = Console.ReadLine();

}
else
{

}

}
catch (IOException e)
{
Console.WriteLine("Error: " + e.Message);
}
}
}

miércoles, 10 de diciembre de 2008

Ejemplo 4

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication1
{
public class CLeerCars

{
public static void Main(string[] args)
{
StreamReader sr = null;
String str;

try
{
//Crear un flujo desde el fichero doc.txt
sr = new StreamReader("C:\\doc\\doc.txt");
//Leer del fichero una linea de texto
str = sr.ReadLine();
while (str != null)
{
//Mostrar la linea leida
Console.WriteLine(str);
//Leer la linea siguiente
str = sr.ReadLine();
}
}
catch (IOException e)
{
Console.WriteLine("Error: " + e.Message);
}
finally
{
//Cerrar el fichero
if (sr != null) sr.Close();
}
Console.ReadLine();

}
}
}

martes, 9 de diciembre de 2008

Ejemplo 3

using System;
using System.IO;
using System.Text;


namespace ConsoleApplication1
{
public class CEscribirCars
{
static void Main(string[] args)
{
StreamWriter sw = null;
string str;
try
{
//Crar un flujo hacia el fichero doc.txt
sw = new StreamWriter("C:\\doc\\doc.txt");
Console.WriteLine("Escriba las lineas de texto a almacenar en el fichero.\n" +
"Finalice cada linea pulsando la tecla .\n" +
"Para finalizar solo pulse la tecla .\n");
//Leer la linea de la entrada estandar
str = Console.ReadLine();
while (str.Length != 0)
{
//Escribir la linea leida en el fichero
sw.WriteLine(str);
//Leer la linea siguiente
str = Console.ReadLine();
}
}
catch (IOException e)
{
Console.WriteLine("Error:" + e.Message);
}
finally
{
if (sw != null) sw.Close();
}
}
}
}



Ejemplo 2

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication1
{
public class CLeerBytes
{
public static void Main(string[] args)
{
FileStream fe = null;
char[] cBuffer = new char[81];
byte[] bBuffer = new byte[81];
int nbytes;
try
{
// Crear un flujo desde el fichero texto.text
fe = new FileStream("C:\\Datos\\texto.txt", FileMode.Open, FileAccess.Read);
//Leer del fichero un linea de texto
nbytes = fe.Read(bBuffer, 0, 81);
//Crear un objeto string con el texto leido
Array.Copy(bBuffer, cBuffer, bBuffer.Length);
String str = new String(cBuffer, 0, nbytes);
// Mostrar el texto leido
Console.WriteLine(str);
}
catch (IOException e)
{
Console.WriteLine("Error: " + e.Message);
}
finally
{
//Cerrar el fichero
if (fe != null) fe.Close();
}
Console.ReadLine();
}
}
}

Ejemplo 1

using System;
using System.IO;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
public class CEscribirBytes
{

public static void Main(string[] args)
{
FileStream fs = null;
byte[] buffer = new byte[81];
int nbytes = 0, car;

try
{
//Crear un flujo hacia el fichero texto.txt
fs = new FileStream("C:\\Datos\\texto.txt", FileMode.Create, FileAccess.Write);
Console.WriteLine("Escriba el texto que desea almacenar en el fichero:");
while ((car = Console.Read()) != '\r' && nbytes < buffer.Length)
{
buffer[nbytes] = (byte)car;
nbytes++;
}

//Escribir la linea de texto en el fichero
fs.Write(buffer, 0, nbytes);
}
catch (IOException e)
{
Console.WriteLine("Error: " + e.Message);

}
Console.ReadLine();
}
}
}
}