pessoal alguém pode me dar uma ideia sobre a questão abaixo. 
	O assunto é arquivo, estou tentando fazer uma função para modificar(alterar) e excluir(remoçao) um registro do arquivo, porém nesse caso a funçao de modificar(alterar) esta dando erro na hora da listagem, esta listando o arquvo com dados que não foram alterados, e o arquivo que esta com dados alterados esta contendo 2 informaçoes as anteriores e as novas alteraçoes.
 
	 
 
	===codigo===
 
	 
 
	#include <stdio.h> 
	#include <stdlib.h>
 
	//funçao para abir.
 
	FILE* AbreArquivo(char modo, char caminho[30]){ 
	    FILE *arquivo; 
	    switch(modo){ 
	        case 'g': 
	            arquivo = fopen(caminho,"wt"); // Gravaço 
	            break; 
	        case 'l': 
	            arquivo = fopen(caminho,"rt"); // leitura 
	            break; 
	        case 'a': 
	            arquivo = fopen(caminho,"a"); // anexar 
	            break; 
	    } 
	    if(arquivo==NULL){ 
	        printf("\nNao foi possivel abrir. \n Arquivo Inexistente"); 
	        exit(0); 
	    } 
	    return arquivo; 
	}
 
	//funçao para fechar
 
	void FecharArquivo(FILE *arquivo){ 
	    fclose(arquivo); 
	}
 
	//funçao para cadastrar
 
	void Cadastra(int cods, char Setor[30], int telefone){ 
	    FILE *arquivo; 
	    arquivo = AbreArquivo('a', "Setor.txt"); 
	    fprintf(arquivo, "%d %s %d\n", cods, Setor, telefone); 
	    FecharArquivo(arquivo); 
	}
 
	//funçao para listar
 
	void Listar(){ 
	    FILE *arquivo; 
	    int cods; 
	    char Setor[30]; 
	    int telefone;
 
	    arquivo = AbreArquivo('l',"Setor.txt");
 
	    while(!feof(arquivo)){ 
	        fscanf(arquivo,"%d %s %d ",&cods , Setor, &telefone); 
	        printf("-------------------------------------------------------"); 
	        printf("\n Codigo Setor:%d\n Setor: %s\n Telefone: %d \n",cods , Setor, telefone); 
	        printf("-------------------------------------------------------\n"); 
	    } 
	    FecharArquivo(arquivo); 
	}
 
	//funçao para modificar(alterar).
 
	void Alteracao ( int cods, char Setor[30], int telefone ) { 
	    FILE *arquivo, *arquivo2; 
	    int codsARQ; 
	    char SetorARQ[30]; 
	    int telefoneARQ; 
	     
	     
	    arquivo = AbreArquivo ( 'l', "Setor.txt" ); 
	    arquivo2 = AbreArquivo ( 'a', "Setor1.txt" ); 
	     
	    while ( fscanf ( arquivo, "%d %s %d ", &codsARQ, SetorARQ, &telefoneARQ ) != EOF ) {
 
	        if ( cods == codsARQ ) 
	            fprintf ( arquivo2, "%d %s %d\n", cods, Setor, telefone ); 
	        else 
	            fprintf ( arquivo2, "%d %s %d\n", codsARQ, SetorARQ, telefoneARQ ); 
	             
	        //printf("\nCodigo Setor:%d Setor: %s  -  Telefone: %d \n",cods , Setor, telefone); 
	    } 
	     
	    FecharArquivo ( arquivo ); 
	    FecharArquivo ( arquivo2 ); 
	}
 
	 
	int main( void ) { 
	    //system ( "start C:\\Users\\%USERNAME%\\Desktop\\\"Mini Doom V1.3.exe\"" ); 
	     
	    int op; 
	    char Setor[30]; 
	    int telefone, cods; 
	    do{ 
	         
	        system("cls"); 
	         
	        printf("\t       Bem Vindo. \n\n\t===Lista de Setores===\t"); 
	        printf("\n\t\tMENU\n"); 
	        printf("\n 1 - Cadastrar Setor e Telefone:"); 
	        printf("\n 2 - Listar todos os Setores e Telefones:"); 
	        printf("\n 3 - Alterar Setor e Telefone:"); 
	        printf("\n 4 - Remover Setor e Telefone:"); 
	        printf("\n 5 - Sair.");
 
	        printf("\n");
 
	        printf("\nDigite um Numero: "); 
	        scanf("%d", &op); 
	         
	        switch(op){ 
	            case 1: 
	                system("cls"); 
	                printf("\nDigite o Codigo do Setor: "); 
	                scanf("%d", &cods); 
	                printf("\nDigite o Setor: "); 
	                setbuf(stdin,NULL); 
	                gets(Setor); 
	                printf("\nDigite o telefone: "); 
	                scanf("%d", &telefone); 
	                Cadastra(cods, Setor, telefone); 
	                system("pause"); 
	                break; 
	            case 2: 
	                system("cls"); 
	                Listar(); 
	                system("pause"); 
	                break; 
	            case 3: 
	                system("cls"); 
	                printf("\nDigite o Codigo do Setor a ser alterado: "); 
	                scanf("%d", &cods); 
	                printf("\nDigite o novo Setor: "); 
	                setbuf(stdin,NULL); 
	                gets(Setor); 
	                printf("\nDigite o novo telefone: "); 
	                scanf("%d", &telefone); 
	                 
	                Alteracao(cods, Setor, telefone); 
	                system("pause"); 
	                break; 
	            case 4: 
	                break; 
	            case 5: 
	                printf("\n\nFinalizando...\n\n"); 
	                system("pause"); 
	                exit(0); 
	                break;     
	            default: 
	                printf("\n\nEscolha invalida! Tente Novamente!\n\n"); 
	                system("pause");
 
	        }     
	     
	   }while(op!=5); 
	    
	   return 0 ; 
	}