Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

biriba_di

Compacta todos .txt do diretorio

Recommended Posts

Pessoal, bom dia!

 

Localizei esse codigo que é um compactador de .txt, ele pede o diretorio, e assim q você coloca ele compacta todos .txt que tiverem na pasta.

Porém quando eu tento compilar ele no GCC ele ta dando o seguinte erro:

14 C:\Users\limadie\Documents\LpI\C++\compacta.cpp cannot convert `char**' to `const char*' for argument `1' to `int strcmp(const char*, const char*)'

33 C:\Users\limadie\Documents\LpI\C++\compacta.cpp cannot convert `char**' to `const char*' for argument `2' to `char* strcat(char*, const char*)'

43 C:\Users\limadie\Documents\LpI\C++\compacta.cpp invalid conversion from `char' to `char*'

43 C:\Users\limadie\Documents\LpI\C++\compacta.cpp initializing argument 1 of `char* strcat(char*, const char*)'

43 C:\Users\limadie\Documents\LpI\C++\compacta.cpp invalid conversion from `char' to `const char*'

43 C:\Users\limadie\Documents\LpI\C++\compacta.cpp initializing argument 2 of `char* strcat(char*, const char*)'

 

To quebrando a cabeça aqui, mas mexo em uma coisa, da erro em outra.. se conseguirem localizar o erro e me sinalizar!

 

Obrigado!!

Segue o codigo:

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

/*

Este programa compacta todos arquivos txt existentes em um determinado diretorio

*/

int main(int *argc, char **argv[]){
       FILE *fp;
       char arquivo_temp[60], comando[80],arquivo_tar[60],arquivo[60];
       if (strcmp(argv[1],"--h") == 0){
               printf("##########################\n\n");
               puts("Programa para compactar arquivos txt...");
               printf("\n");
               puts("Sintaxe: ");
               printf("\n");
               puts("  #./compacta <DIRETORIO>");
               printf("\n\n");
               puts("Exemplo:");
               printf("\n");
               puts("#./compacta /tmp");
               printf("\n");
               puts("**compacta todos arquivos txt existentes em /tmp");
               printf("\n#########################\n");
               exit(0);
       }
       int i;

       char lista[80]="ls ";
       strcat(lista,argv[1]);
       strcat(lista,"/*.txt");
       strcat(lista," > lista");
       system(lista);
       fp = fopen("lista","r");
       while(!feof(fp)){
               /*fgets(string,60,fp)*/

               fscanf(fp,"%s",arquivo_temp);
               for(i=0;i<strlen(arquivo_temp)-4;i++)
                       strcat(arquivo[i],arquivo[i]);

               printf("\n\n%s\n\n",arquivo);


               /*criando o pacote tar*/

               /*comando = 'tar -cf' arquivo_tar  arquivo */

               strcpy(comando,"tar -cf ");
               strcpy(arquivo_tar,arquivo);
               strcat(arquivo_tar,".tar");
               strcat(comando,arquivo_tar);
               strcat(comando," ");
               strcat(comando,arquivo);
               system(comando);

               strcpy(comando,"");

               /*criando o pacote bz2*/
               strcpy(comando,"bzip2 -z ");
               strcat(comando,arquivo_tar);
               system(comando);
       }
               system("rm *.txt -rf");
               system("rm *.tar -rf");
       fclose(fp);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Provavelmente o seu erro é que você declarou argc como um ponteiro de int. Ele é, na verdade, um inteiro comum.

 

Mude de:

 

int main(int *argc, char **argv[]){

 

Para:

 

int main(int argc, char **argv[]){

 

 

E veja se funciona.

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, isso mesmo, não notei o outro erro, rs...

 

Você pode colocar como o guidjos colocou ou como:

 

int main(int argc, char **argv){

 

Dê uma estudada a mais em ponteiros, eles são muito importantes e parece que você ainda não os está entendendo bem.

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, isso mesmo, não notei o outro erro, rs...

 

Você pode colocar como o guidjos colocou ou como:

 

int main(int argc, char **argv){

 

Dê uma estudada a mais em ponteiros, eles são muito importantes e parece que você ainda não os está entendendo bem.

 

 

Abraços :D

 

Resolveu esse problema, porem ainda continua com erro nessa parte do codigo:

fscanf(fp,"%s",arquivo_temp);

for(i=0;i<strlen(arquivo_temp)-4;i++)

strcat(arquivo,arquivo);

Segue o erro:

43 C:\Users\limadie\Documents\LpI\C++\testecompacta.cpp initializing argument 1 of `char* strcat(char*, const char*)'

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.