Olá pessoal…
Hoje vou mostrar como copiar um arquivo utilizando a linguagem C.
A funcionalidade criada, funciona lendo os dados de um arquivo de origem (linha a linha), enquanto armazena em um arquivo de destino.
A função criada, solicita primeiramente o caminho do arquivo de origem e o de destino.
Depois basta confirmar, será mostrado uma porcentagem da cópia e uma mensagem se foi feita com sucesso a cópia.
Abaixo o fonte desenvolvido:
#include <stdio.h> #include <stdlib.h> #define Tamanho_Nome 100 #ifdef WIN32 //se for windows #define Limpa_Tela system("cls") #else //senão, ex.: linux #define Limpa_Tela system("/usr/bin/clear") //limpa tela #endif void str_trim(char *trim_origem, char *trim_destino); void main() { //declarando variáveis que serão utilizadas char conteudo, auxiliar[100], nome_arq_origem[100], nome_arq_destino[100]; int linhas = 0, linha_atual = 0; FILE *origem, *destino; Limpa_Tela; //Arquivo de Origem printf("Nome do arquivo de Origem:\n> "); fgets(auxiliar, Tamanho_Nome, stdin); //Abre o arquivo de origem str_trim(auxiliar, nome_arq_origem); origem = fopen(nome_arq_origem, "r"); //Se o conteúdo for nulo if (origem == NULL) { printf("Arquivo de origem nao existe...\n"); exit(EXIT_FAILURE); } //Arquivo de Destino printf("Nome do arquivo de Destino:\n> "); fgets(nome_arq_destino, Tamanho_Nome, stdin); //Abre o arquivo de destino destino = fopen(nome_arq_destino, "w"); //Se não foi possível abrir, retorna erro if (destino == NULL) { fclose(origem); printf("Não foi possível gerar o arquivo destino...\n"); exit(EXIT_FAILURE); } //Enquanto tiver conteudo na origem, aumenta o número de linhas while ((conteudo = fgetc(origem)) != EOF) { linhas++; } //Voltando o arquivo ao topo rewind(origem); //Enquanto tiver conteudo na origem, inputa esse conteudo no arquivo destino while ((conteudo = fgetc(origem)) != EOF) { fputc(conteudo, destino); //Mostra a porcentagem da cópia Limpa_Tela; linha_atual++; printf("Copiando %d%\n", (linha_atual * 100 / linhas)); } //Mostrando mensagem de término printf("\nArquivo copiado com sucesso\n\n"); //Fechando os ponteiros da origem e destino fclose(origem); fclose(destino); } //Retira os espaços de uma string void str_trim(char *trim_origem, char *trim_destino) { int flag = 0; //Da esquerda para a direita while(*trim_origem) { //Se não tiver espaço em branco, define onde será a origem if(!isspace((unsigned char) *trim_origem) && flag == 0) { *trim_destino++ = *trim_origem; flag = 1; } //Setando o começo do destino trim_origem++; if(flag == 1) { *trim_destino++ = *trim_origem; } } //Da direita para a esquerda while(1) { //Diminuindo o destino trim_destino--; //Se não tiver espaço em branco, finaliza o laço if(!isspace((unsigned char) *trim_destino) && flag == 0) { break; } //Seta a flag, e altera o caracter para definir o fim de uma string flag = 0; *trim_destino = '\0'; } }
Referências:
Programming Simplified
Code Review
Bom pessoal, por hoje é só.
Abraços e até a próxima.