Position

07/06/2004 - 15:52 por Sara | Informe spam
Hola grupo. Sigo con el problemilla, pero os explico para ver si se os
ocurre algo porque ya no se como hacerlo. Estoy creando una aplicación q
genera ficheros. Los cuales llevan una cabecera que introduce el
usuario.Algunos de los campos que recogo los tengo que comprimir en menos
bytes.Para que me lo grabe al fichero y quede comprimido necesito grabarlo
con un File Stream. Los siguientes datos que grabo,se recogen de un
datagrid. EL problema es el siguiente:
La cabecera solo puede grabarse una vez por registro. Esto esta conseguido.
El fichero debe estar grabado en linea sin ningun salto de carro.
El usuario debe mostrar los datos en el datagrid antes de volver a meter en
un registro, con lo cual el los muestra y al grabar el siguiente regiotro,
en el archivo el datagrid se escribe dos veces.
Necesito que la propiedad sobreescribir ficehro, del StreamWriter este
deshabilitada porque sino me borraria la cabecera.
He intentado posicionarme siempre al final de la cabecera, ya que su tamañao
es estático pero me dice algo como " no se puede posicionar en un fichero
que se ha abierto como append".
No se, se os ocurre algo?
Os proporciono el código que casi habeis hecho vosotros con vuestra ayuda.
Muchas gracias

private void grabar_Click(object sender, System.EventArgs e)

{


try

{

string contrato = Contract.Text + ".prv";

System.IO.StreamWriter sw = new System.IO.StreamWriter("C:\\" +
contrato,false);

foreach (DataRowView dr in dtprv.DefaultView)

{

sw.WriteLine(

(dr["EMISOR"]).ToString().PadRight(6,'\0') +

(dr["DESCRIPCION"]).ToString().PadRight(20,'\0')+

(dr["CADUCIDAD"]).ToString()+

(dr["TRATAMIENTO"]).ToString().PadRight(2,'\0'));

}


sw.Close();

}

catch (System.IO.FileNotFoundException)

{}

catch (System.IO.DirectoryNotFoundException)

{}

catch (System.IO.FileLoadException)

{}



try

{

string contrato = Contract.Text + ".prv";

System.IO.FileInfo fi = new FileInfo(contrato);



if (fi.Exists == false)

{

fichero();

}

System.IO.StreamWriter sw2 = new System.IO.StreamWriter(contrato,false);


foreach (DataRowView dr2 in dtprv.DefaultView)

{

sw2.Write(

(dr2["EMISOR"]).ToString().PadRight(6,'\0')+

(dr2["DESCRIPCION"]).ToString().PadRight(20,'\0')+

(dr2["CADUCIDAD"]).ToString().PadRight(1,'\0')+

(dr2["TRATAMIENTO"]).ToString().PadRight(2,'\0'));

}


sw2.Close();


}

catch (System.IO.FileNotFoundException)

{}





Ta lueeeeee
 

Leer las respuestas

#1 Sara
07/06/2004 - 16:56 | Informe spam
Bueno se me olvidó parte del código, lo siento. Os mando el método
fichero().
Ya se que el programa en sí es un churro,pero creedme que intento hacerlo
mejor.

private void fichero()

{

try

{

string contrato = Contract.Text + ".prv";

System.IO.FileStream fs = new
FileStream(contrato,FileMode.Append,FileAccess.Write);


reg = Ver.Text

+ anno.Text + mes.Text.PadLeft(2,'\0')+ dia.Text.PadLeft(2,'\0')

+ hora.Text.PadLeft(2,'\0') + min.Text.PadLeft(2,'\0')

+ seg.Text.PadLeft(2,'\0') + "00" + "0" + seguridad.Text;

encodedbyte = ascii.GetBytes(reg);

encodedbyte[1] = (byte)short.Parse(Ver.Text);

encodedbyte[0] = (byte)(short.Parse(Ver.Text) >> 8);

encodedbyte[20] = (byte)(short.Parse(key.Text));

fs.Write(encodedbyte,0,encodedbyte.Length);

fs.Close();


}

catch (System.IO.FileNotFoundException)

{}

catch (System.IO.DirectoryNotFoundException)

{}

catch (System.IO.FileLoadException)

{}

Preguntas similares