Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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
Postado

@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
Postado

@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

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...