Não consigo editar um arquivo [RESOLVIDO]

1. Não consigo editar um arquivo [RESOLVIDO]

issacar
beche

(usa Debian)

Enviado em 29/04/2015 - 21:52h

ERROR 404


  


2. Re: Não consigo editar um arquivo

Paulo
paulo1205

(usa Ubuntu)

Enviado em 29/04/2015 - 22:55h

Você está abrindo o arquivo com modo "a+", o que indica modo de leitura e append. Isso significa que toda operação de escrita implicará um deslocamento para o fim do arquivo antes de ser executada.

Se você quiser alterar um arquivo existente sem destruir seu conteúdo, deve usar o modo "r+". Se o arquivo não existir ou se você quiser destruir conteúdo preexistente, use o modo "w+".

NOTA: O modo "r+" não cria o arquivo. Se você quiser abrir preservando conteúdo preexistente ou criar o arquivo que não exista, deve usar algo como o seguinte.

FILE *fp;
fp=fopen("arquivo", "r+b");
if(!fp){
/*
No UNIX, verifico se a causa do erro foi inexistência
do arquivo, antes de tentar criar um arquivo novo.
Essa medida de segurança é particularmente útil
para evitar o apagamento acidental do arquivo num
caso de erro transitório do sistema (falta de memória,
buffers ou outro recurso, por exemplo).

Não sei como fazer a mesma coisa no Windows.
Talvez o mesmo código funcione. Se puder testar
e dizer o comportamento aqui no fórum, será muito
bem-vindo.
*/
#ifdef unix
if(errno != ENOENT){
fprintf(stderr, "Não foi possível abrir o arquivo: %s.\n", strerror(errno));
exit(1);
}
#endif

/* Tenta abrir forçando a criação de um arquivo novo. */
fp=fopen("arquivo", "w+b");
}
if(!fp){
fprintf(stderr, "Não foi possível criar o arquivo: %s.\n", strerror(errno));
exit(1);
}

/*
Neste ponto, fp será garantidamente um ponteiro válido
para operações de leitura e de escrita, independentemente
do caminho seguido acima.
*/


/* Versão reduzida, sem os mesmos cuidados. */
if(
!(fp=fopen("arquivo", "r+b")) &&
/* Segunda tentativa apenas se a primeira falhar. */
!(fp=fopen("arquivo", "w+b"))
){
/* As duas tentativas falharam. */
fprintf(stderr, "Não foi possível abrir o arquivo: %s.\n", strerror(errno));
exit(1);
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts