Ir ao conteúdo
  • Cadastre-se

C <Código com HASH de comparação >


Posts recomendados

Olá, tenho um trabalho para fazer, mas estou tendo dificuldades com o código. 

O trabalho é o seguinte:

 

"Faça um programa que gere hashes de arquivos de texto e verifique se mesmos são idênticos através da comparação dos hashes.

 

No menu inicial deve ser mostrada a seguinte interface:

Nome ou caminho completo do arquivo 1:

Nome ou caminho completo do arquivo 2:

A saída deve ser mostrada conforme segue:

Os arquivos são iguais.

Hash:

Ou

Os arquivos não são iguais.

Hash 1:

Hash 2:

 

O código que criei é este:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

FILE *hash;
FILE *hash1;
char m[101];
char m1[101];
int t;
int t1;

if((hash = fopen("Meu_arquivo.txt","w")) == NULL)
{
    printf("Erro ao abrir arquivo!!!\n");
    exit(1);
}
printf("Nome ou caminho completo do arquivo 1: \n");
gets(m);

t = strlen(m);

fwrite(m, sizeof(char), t, hash);


if((hash1 = fopen("Meu_arquivo.txt1","w")) == NULL)
{
    printf("Erro ao abrir arquivo!!!\n");
    exit(1);
}

printf("Nome ou caminho completo do arquivo 2:\n");
gets(m1);

t1 = strlen(m1);

fwrite(m1, sizeof(char), t1, hash1);


if (m == m1)
    printf("Os arquivos sao iguais.\n Hash: %s", m, hash, m1, hash1);
else
 printf("Os arquivos nao sao iguais.\nHash 1: %s \nHash 2: %s ", m, m1, hash, hash1);

 }

 

 

E quando vou processar, sempre aparece que são diferentes, nunca que são iguais. Alguém poderia me ajudar? 
OBS: Eu não sei se estou utilizando hash da maneira certa.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@João Miguel Freitas Mausa   não existe comando para comparar arquivos , o que você pode fazer é copiar tudo que estiver no arquivo e colocar em uma string e em seguida você compara as string , ou então você pode abrir os dois arquivos e ir pegando os dados de cada um e ir comparando um com o outro , e no caso de algum deles ser diferente  , pode parar as comparações pois então um arquivo não será igual ao outro .

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@devair1010 Eu entendi o principio, mas como eu faço para usar o strcmp? Eu irei comparar, e depois irei printar na tela normal caso ele seja igual, certo? E caso seja diferente? 
Desculpe pela estupidez, mas eu ainda não entendi, creio eu que esteja fazendo algo errado ainda por falta de conhecimento.

adicionado 29 minutos depois

@devair1010Consegui!!! Fico muito agradecido pela ajuda! Tenha uma ótima noite!

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@João Miguel Freitas Mausa    o frwrite e o fread é mais usado para gravar e ler  em  arquivo binário junto com struct , e como você está gravando string no arquivo txt  então melhor usar o fprintf para gravar no arquivo e o fgets  para ler uma linha toda no arquivo , então seu código poderia ser assim  :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    FILE *hash,*hash1;
    char m[101],m1[101],m2[101],m3[101];
    int t,t1;
    hash = fopen("Meu_arquivo.txt","a");                 /* abre para leitura e escrita ao final do arquivo */
    if( hash == NULL){
        hash =  fopen("Meu_arquivo.txt","w");            /*deleta e depois cria o arquivo para escrita ao final do arquivo */
        printf("arquivo criado !!!\n");
        /*exit(1);*/
    }
    printf("Nome ou caminho completo do arquivo 1: \n");
    gets(m);

    t = strlen(m);

    /* fwrite(m, sizeof(char), t, hash);  é mais usado para arquivo binário junto com struct */

    fprintf(hash,"%s",m);                                   /* grava no arquivo do tipo txt */

    hash1 = fopen("Meu_arquivo1.txt","a");                  /* abre para leitura e escrita ao final do arquivo */
    if((hash1) == NULL){
        hash1 = fopen("Meu_arquivo1.txt","w");              /*deleta e depois cria o arquivo para escrita ao final do arquivo */
        printf("Erro ao abrir arquivo!!!\n");
        /*exit(1);*/
    }

    printf("Nome ou caminho completo do arquivo 2:\n");
    gets(m1);

    t1 = strlen(m1);

    fprintf(hash1,"%s",m1);                                  /* grava no arquivo do tipo txt */

    fclose(hash1);                                           /* fechar o arquivo senão dará erro */
    fclose(hash );                                           /* fechar o arquivo senão dará erro */

    hash = fopen("Meu_arquivo.txt" ,"r");                    /*abre só para leitura*/
    hash1= fopen("Meu_arquivo1.txt","r");                    /*abre só para leitura*/

    fgets(m2, sizeof(m2), hash1);                            /* le uma linha inteira até o \n newline */
    fgets(m3, sizeof(m3), hash );                            /* le uma linha inteira até o \n newline */

    fclose(hash1);                                           /* fechar o arquivo senão dará erro */
    fclose(hash );                                           /* fechar o arquivo senão dará erro */

    printf("hash = %s\n",m2);
    printf("hash1= %s\n",m3);

    if(strcmp(m2,m3)==0)                                     /* compara strings */
        printf("Os arquivos sao iguais.\n Hash : %s  Hash1 : %s\n", m3,m2);
    else
        printf("Os arquivos nao sao iguais.\nHash 1: %s \nHash 2: %s ",m3,m2);

 }

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...