none
Copiar byte por byte e ter resultado (tamanho em bytes) igual ao arquivo de origem. RRS feed

  • Pergunta

  • Olá, olha eu de novo aqui...

    Bom, tenho esta função que pega arquivos grandes e os copia em uma quantidade de bytes por vez, com uma barra de progresso atualizando o quanto ela já foi copiada. Porém, no meu software tenho uma outra função que faz comparação entre o arquivo de origem e o que foi copiado, retornando true ou false. O que acontece é que a função de cópia por byte tem um valor que eu determino de tamanho que será copiado por vez, e se o ultimo pedaço for menor que este tamanho ele irá implementar no arquivo final, ficando um pouco maior (poucos bytes), o que acaba atrapalhando a minha função de comparação de arquivos. 

    Gostaria de saber como posso fazer para que chegando no ultimo pedaço ele copiasse apenas o restante de bytes, sem incrementar nenhum byte a mais. 

    Eis o código:

    Public Sub CopiarBinario(ByVal Origem As String, ByVal Destino As String)
    
            Dim ArqEntrada = IO.File.Open(Origem, IO.FileMode.Open)
            Dim TamBuffer As Decimal = 4096
    
            If My.Computer.FileSystem.FileExists(Destino) Then
                My.Computer.FileSystem.DeleteFile(Destino)
            End If
    
            Dim Bytes = New Byte(TamBuffer - 1) {}
    
            Processo2.Maximum = ArqEntrada.Length + TamBuffer
    
    
            While ArqEntrada.Read(Bytes, 0, TamBuffer) > 0
    
                My.Computer.FileSystem.WriteAllBytes(Destino, Bytes, True)
    
                Processo2.Value = Processo2.Value + TamBuffer 
    
                Application.DoEvents()
    
            End While
    
    
    
            Processo2.Value = 0
    
            ArqEntrada.Close()
    
        End Sub


    Qualquer ajuda é bem vinda, obrigado.

    segunda-feira, 9 de fevereiro de 2015 01:17