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);
}