Pregunta

He escrito un programa que establecerá una conexión de red con una computadora remota usando TCPClient. Lo estoy usando para transferir archivos en trozos de 100k a una aplicación .net remota y luego los escribe en el HardDrive. Todas las transferencias de archivos funcionan bien, excepto cuando se trata de archivos ZIP: es curioso notar que el archivo reensamblado siempre es 98K ... ¿hay algún secreto oscuro para los archivos ZIP que impiden que se manejen de esta manera? Nuevamente, todas las demás transferencias de archivos funcionan bien, image, xls, txt, chm, exe, etc.

Confundido

¿Fue útil?

Solución

Bueno, no has mostrado ningún código, así que es un poco complicado decir exactamente qué está mal.

El error habitual es asumir que Stream.Read lee todos los datos que le pides en lugar de darse cuenta de que podría leer menos, pero que la cantidad que realmente leer es el valor de retorno.

En otras palabras, el código no debería ser:

byte[] buffer = new byte[input.Length];
input.Read(buffer, 0, buffer.Length);
output.Write(buffer, 0, buffer.Length);

pero algo así como:

byte[] buffer = new byte[32 * 1024];
int bytesRead;
while ( (bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
    output.Write(buffer, 0, bytesRead);
}

Pero eso es solo una suposición. Si pudiera publicar algún código, tendríamos una mejor oportunidad de resolverlo.

Otros consejos

El código real sería útil.

¿Está utilizando BinaryReader / BinaryWriter?

(es decir, basado en datos en lugar de texto).

Puede intentar usar una comparación de archivos hexadecimales (por ejemplo, Más allá de la comparación ) para comparar el original y copiar y mira si eso te da alguna pista.

¿Podría ser que está sobrescribiendo (en lugar de agregar) el archivo existente con cada fragmento recibido? Por lo tanto, el tamaño final del archivo será & Lt; = el tamaño de un fragmento.

Pero sin ningún código, es difícil decir la razón del problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top