文件扩展名转换不起作用

时间:2017-05-25 02:57:06

标签: c file

我的算法应该接收扩展名为.crp的文件并使用关键字对其进行解密,生成.drp扩展文件(它也可以从.txt加密到.crp)。我不知道为什么它不会生成.drp文件,即使它可以从.txt文件条目创建.crp文件。

总结:.txt>> .crp有效,但.crp>> .drp无效。

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

int main(int argc,char *argv[]){
    char a[50],b[50],c[50],d[50],e[50],entrada[200],saida[200],ch,crp[4],drp[4];
    int i,j=0,k;
    FILE *entra,*sai;
.   
    //recebimento de argumento externos pelo DOS
    if(argc>=2){
            strcpy(entrada,argv[1]);
    }else{
        printf("Nome do arquivo: ");
        gets(entrada);
    }

    strcpy(crp,".crp");
    strcpy(drp,".drp");

    //verifica o formato do arquivo de entrada
    k=0;
    for(i=strlen(entrada)-4;i<strlen(entrada);i++){
        if(entrada[i]==crp[k]){
            j++;
        }
        k++;
    }

    //Converte o formato do arquivo de entrada
    //extensão .drp
    if(j==4){
        k=0;
        strcpy(saida,entrada);
        for(i=strlen(entrada)-4;i<strlen(entrada);i++){
            saida[i]=drp[k];
            k++;
        }
    }else{//extensão .crp
        k=0;
        strcpy(saida,entrada);
        for(i=strlen(entrada)-4;i<strlen(entrada);i++){
            saida[i]=crp[k];
            k++;
        }   
    }

    //Leitura no modo binário com possibilidade de reescritura
    entra=fopen(entrada,"r+b");
    sai=fopen(saida,"w+b");

    //Caso não receba nenhum arquivo de entrada
    if(entra==NULL||sai==NULL){
        printf("Falha na abertura de arquivos\n");
        exit(0);
    }

    //leitura do arquivo de entrada
    i=0;
    ch=fgetc(entra);
    while(ch!=EOF){
        a[i]=ch;
        ch=fgetc(entra);
        i++;
    }
    for(i=0;i<strlen(a)-2;i++){
        e[i]=a[i];
    }

    //Inserir palavra chave
    printf("Palavra chave: ");
    gets(b);

    //Encriptação
    j=0;
    for(i=0;i<strlen(e);i++){
        c[i]=b[j];
        j++;
        if(j==strlen(b)){
            j=0;
        }
    }

    for(i=0;i<strlen(c)-2;i++){
        b[i]=c[i];
    }

    for(i=0;i<strlen(a);i++){
        d[i]=e[i]^b[i];
    }

    //Passagem do string para o arquivo de saida
    for(i=0;i<strlen(d)-2;i++){
        fputc(d[i],sai);
    }

    //fechamento do file
    fclose(entra);
    fclose(sai);

    return 0;
}

0 个答案:

没有答案