Copiar Archivo

16/03/2005 - 11:21 por e-lores | Informe spam
Quiero copiar un archivo bastante grande y me gustaría poder ir informando
al usuario del estado del proceso (como hace Windows)

He descartado el File.Copy() por que no me informa del estado y he intentado
lo siguiente:

FileStream fsInput = new FileStream("prueba.xls", FileMode.Open);
FileStream fsOutput = new FileStream("copia.xls", FileMode.Create);

BinaryReader br = new BinaryReader(fsInput);
BinaryWriter bw = new BinaryWriter(fsOutput);

while(br.PeekChar() > -1 )
{
bw.Write(br.ReadByte());
bw.Flush();
}

br.Close();
bw.Close();

Para archivo de pocas K funciona pero si supera las 64 me salta una
excepción (Desboradmiento del búfer de conversión)

¿Alguién sabe como solucionarlo? Cualquier otra forma de hacer lo que quiero
ya me iría bien.

Gracias.
Ernesto Lores.
 

Leer las respuestas

#1 A.Poblacion
16/03/2005 - 11:32 | Informe spam
"e-lores" wrote in message
news:
Quiero copiar un archivo bastante grande y me gustaría poder ir informando
al usuario del estado del proceso (como hace Windows)

He descartado el File.Copy() por que no me informa del estado y he


intentado
lo siguiente:

FileStream fsInput = new FileStream("prueba.xls", FileMode.Open);
FileStream fsOutput = new FileStream("copia.xls", FileMode.Create);

BinaryReader br = new BinaryReader(fsInput);
BinaryWriter bw = new BinaryWriter(fsOutput);

while(br.PeekChar() > -1 )
{
bw.Write(br.ReadByte());
bw.Flush();
}

br.Close();
bw.Close();

Para archivo de pocas K funciona pero si supera las 64 me salta una
excepción (Desboradmiento del búfer de conversión)

¿Alguién sabe como solucionarlo? Cualquier otra forma de hacer lo que


quiero
ya me iría bien.



Prueba asi:

const int tamBuf = 1048576;
byte[] buf = new byte[tamBuf];

FileStream fsl = new FileStream(archivoALeer, FileMode.Open,
FileAccess.Read);
FileStream fso = new FileStream(archivoAGrabar, FileMode.CreateNew,
FileAccess.Write);

int nLeidos;
do
{
nLeidos = fsl.Read(buf, 0, tamBuf);
if (nLeidos>0)
fso.Write(buf, 0, nLeidos);
} while (nLeidos>0)

fso.Close();
fsl.Close();

Preguntas similares