[C] Apaga linha em um Arquivo
Publicado por Enzo de Brito Ferber 06/03/2006
[ Hits: 18.086 ]
Homepage: http://www.maximasonorizacao.com.br
Este script apaga a linha "dita" por um
usuário de um arquivo "dito" pelo mesmo.
Código de minha autoria bem comentado
e simples.... ajuda bastante a entender
manipulação de arquivos, aloção
dinamina de memoria, e maniputação de
strings....
/*********************************************************************************************
Programa: apaga.c
Autor: Enzo Ferber 'Slackware_10'
Propósito: Apaga linha definida por usuário em um arquivo
**********************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int abreArquivo(char arquivo[]){
FILE *arqEntrada;
FILE *arqSaida;
int line = 0;
int linha = 1;
int i;
char textoArquivo[100];
char *output;
output = (char *)malloc((strlen(arquivo)+strlen(".editado")) * sizeof(char));
strcat(output, arquivo);
strcat(output, ".editado");
if((arqEntrada = fopen(arquivo, "r")) == 0){ //testa se o arquivo pode ser aberto
printf("Impossivel abrir arquivo...\n"); //informa o erro
exit(1); //finaliza execução
}
if((arqSaida = fopen(output, "w")) == 0){ //testa se o arquivo pode ser aberto
printf("Impossivel abrir arquivo...\n"); //informa o erro
exit(1); //finaliza execução
}
printf("Digite a linha a ser apagada no arquivo: "); //pede a linha
scanf("%d", &line); //le a linha e armazena na variável 'line'
rewind(arqEntrada); //certifica de que o cursor esta no primeiro caractere do arquivo
for(i = 0; !feof(arqEntrada);i++){ //incrementa 'i' enquando não for fim de arquivo
memset(textoArquivo, '{FONTE}', 100); //inicializa e/ou limpa string 'textoArquivo'
fgets(textoArquivo, 101, arqEntrada); //pega uma string de 100 caracteres
if(linha == line){ //se a linha for a escolhida
fputc('\n', arqSaida); //troca a linha que o usuario quer por nova linha
linha = linha + 1; //incrementa o contador de linhas
continue; //volta ao inicio do loop sem executar o resto
}
linha = linha + 1; //incrementa o contador de linas
fputs(textoArquivo, arqSaida); //coloca a string 'textoArquivo' no arquivo encoded.txt
}
printf("O arquivo output %c: %s\n",233, output);
free(output); //desaloca espaço alocado para string contendo novo do novo arquivo
fclose(arqEntrada); //fecha a stream 'arqEntrada'
fclose(arqSaida); //fecha a stream 'arqSaida'
}
int main(void){ //rotina principal do programa
char arquivo[100];
printf("Digite o caminho completo do arquivo: ");
__fpurge(stdin); //limpa buffer de entrada
scanf("%[^\n]", arquivo);
abreArquivo(arquivo);
}
MakeInt - gerador de wordlist numérica
Exemplo de manipulação de arquivos
Cinnamon seria a aposta acertada frente às outras interfaces gráficas mais populares?
KDE Plasma - porque pode ser a melhor opção de interface gráfica
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Vou destruir sua infância:) (8)
Interface gráfica com problema (2)
Instalar Linux em notebook Sony Vaio VPCEG13EB (13)









