none
Como Comparar Arquivos de Áudio em C# RRS feed

  • Pergunta

  • Senhores(as),

    Estou com a seguinte dúvida:

    Como faço para comparar dois arquivos de áudio?

    Não importa a extensão.

    Gostaria de passar o caminho de duas músicas na minha a plicação e ele me retornar se são iguais ou não, eu consigo fazer isso?

    Desde já obrigado!

    Abç.

    sexta-feira, 27 de abril de 2012 01:42

Respostas

  • Renan, bom dia

    Faça uam verificação através do binário do seu arquivo, pode ser lento, mas irá da certo.

        const int BYTES_TO_READ = sizeof(Int64);
    
        static bool FilesAreEqual(FileInfo first, FileInfo second)
        {
            if (first.Length != second.Length)
                return false;
    
            int iterations = (int)Math.Ceiling((double)first.Length / BYTES_TO_READ);
    
            using (FileStream fs1 = first.OpenRead())
            using (FileStream fs2 = second.OpenRead())
            {
                byte[] one = new byte[BYTES_TO_READ];
                byte[] two = new byte[BYTES_TO_READ];
    
                for (int i = 0; i < iterations; i++)
                {
                     fs1.Read(one, 0, BYTES_TO_READ);
                     fs2.Read(two, 0, BYTES_TO_READ);
    
                    if (BitConverter.ToInt64(one,0) != BitConverter.ToInt64(two,0))
                        return false;
                }
            }
    
            return true;
        }


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    sexta-feira, 27 de abril de 2012 11:45
    Moderador

Todas as Respostas

  • Renan, bom dia

    Faça uam verificação através do binário do seu arquivo, pode ser lento, mas irá da certo.

        const int BYTES_TO_READ = sizeof(Int64);
    
        static bool FilesAreEqual(FileInfo first, FileInfo second)
        {
            if (first.Length != second.Length)
                return false;
    
            int iterations = (int)Math.Ceiling((double)first.Length / BYTES_TO_READ);
    
            using (FileStream fs1 = first.OpenRead())
            using (FileStream fs2 = second.OpenRead())
            {
                byte[] one = new byte[BYTES_TO_READ];
                byte[] two = new byte[BYTES_TO_READ];
    
                for (int i = 0; i < iterations; i++)
                {
                     fs1.Read(one, 0, BYTES_TO_READ);
                     fs2.Read(two, 0, BYTES_TO_READ);
    
                    if (BitConverter.ToInt64(one,0) != BitConverter.ToInt64(two,0))
                        return false;
                }
            }
    
            return true;
        }


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    sexta-feira, 27 de abril de 2012 11:45
    Moderador
  • Funcionou!

    Mas eu estava procurando algo mais rápido,

    Será que é possivel?

    quarta-feira, 2 de maio de 2012 17:38