Pergunta

Eu escrevi um programa que irá etablish uma conexão de rede com um computador remoto usando TCPClient estou usando-o para transferir arquivos em 100k pedaços de uma aplicação .NET remoto e que inturn, em seguida, escreve-los para o disco rígido. Todas as transferências de arquivos funcionam bem, exceto quando se trata de arquivos zip - é curioso notar que o arquivo reasembled é sempre 98K ... existe algum segredo obscuro para arquivos zip que os impedem de ser tratado dessa maneira. Mais uma vez todos os outros transferências de arquivos funcionam bem, imagem, xls, txt, chm, exe etc.

Confuso

Foi útil?

Solução

Bem, você não mostraram qualquer código por isso é meio complicado para dizer exatamente o que está errado.

O costume erro é assumir que Stream.Read lê todos os dados que você pedir para ele em vez de perceber que ele pode ler menos, mas que o montante que realmente leitura é o valor de retorno.

Em outras palavras, o código não deve ser:

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

mas algo como:

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

Mas isso é apenas um palpite. Se você poderia postar algum código, teríamos uma melhor chance de descobrir isso.

Outras dicas

O código real seria útil.

Você está usando BinaryReader / BinaryWriter?

(i. De dados com base em vez de texto com base).

Você pode tentar usar um arquivo hex comparar (por exemplo Beyond Compare ) para comparar o original e cópia e ver se isso lhe dá alguma pista.

Pode ser que você está substituindo (em vez de anexar a) o arquivo existente com cada pedaço recebido? Portanto tamanho final do arquivo será <= o tamanho de um pedaço.

Mas, sem qualquer código, é difícil dizer a razão para o problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top