Suppression de fichier

Signaler
-
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
-
J'ai un programme dans lequel je dois supprimer un fichier.Le probleme
c'est qu'il ne se supprime pas toujours. Quelles sont les conditions
pour qu'un fichier ne puisse etre supprimé ?


Merci d'avance.


PS : Suppression testée avec "unlink" et "remove"

void chargement_du_telephone(pt_cellule *tete,char numero_tel[],rep *repertoire,int index_telephone[])
{

     FILE* fichier = NULL;

     char num_select[25]; /* utilisé pour la lecture du fichier de SMS */

     int nb_sms_en_memoire = 0 ;

     int i =0;

     char telephone_temp[11];

     char nom_temp[25];

     /* Il faut faire un controle pour savoir si on peut ajouter des sms dans la memoire

      Si c'est une actualisation est que le nombre de SMS dans la liste depasse 50 SMS

      alors on ne peut les ajouter pour l'instant */

     

     if(( nb_sms_en_memoire = compteur_nb_sms(tete)) < MAX_SMS)

     

     {

            /* Il faut dans un permier temps charger les SMS dans la liste chainée venant du fichier memoireSMS_numtel.txt : */

            sprintf(num_select, "memoireSMS_%s.txt",numero_tel); /* On crée le fichier avec le numero de telephone */

            /* num_select represente le nom du fichier */

            OUVERTURE_fichier(tete,num_select);

           

             /* Ensuite on ajoute les SMS reçu :  */       

            sprintf(num_select, "%s.txt",numero_tel); /* On crée le fichier avec le numero de telephone  */     

            OUVERTURE_fichier(tete,num_select);

       

     }

    /* Sinon cela signifie qu'il n'y a plus de place en memoire actuellement */

    else

    {

         printf("\nVous n'avez plus de place pour recevoir de nouveaux SMS");

         printf("\n Veuillez en supprimer");

    } 


           
/* Maintenant on va charger le reperoire */

sprintf(num_select, "memoire_repertoire_%s.txt",numero_tel); /* On crée le fichier avec le numero de telephone  */     

fichier = fopen(num_select, "r"); 
if((fichier != NULL) && (!fichier_VIDE(num_select)))

   {           

            while(!feof(fichier))/* tant qu'on arrive pas à la fin du fichier */

                 {

                    fscanf(fichier,"\r%[^\\]\\ %s\n",telephone_temp,nom_temp); 

                   

                    ajout(repertoire,index_telephone,telephone_temp,nom_temp);  /*on s'occupe du tableau d'index */

                    repertoire->dernier++;         

                 }


fclose(fichier);

   }

SUPPRIMER_fichier(num_select);

}

void SUPPRIMER_fichier(char num_select[])
{

 remove(num_select); /*On supprime le fichier */

 system("PAUSE");

 

}

2 réponses


Si j'enleve la ligne : (!fichier_VIDE(num_select)) ca fonctionne, mais j'en ai besoin , alors comment faire?

Code : C
int fichier_VIDE(char num_select[])
{

    int VIDE = 0 ; /* le fichier est considéré comme plein par défaut */

    FILE* fichier = NULL;

       

    fichier = fopen(num_select, "r");


          fseek(fichier,0,SEEK_END);

          if(ftell(fichier) == 0) 

             {

             VIDE = 1 ; /* le fichier est vide */

             }

     fclose(fichier); 
return(VIDE);
}
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
17
fichier = fopen(num_select, "r");
if ((fichier != NULL) && (!fichier_VIDE(num_select)))
{          
    while(!feof(fichier)) /* tant qu'on arrive pas à la fin du fichier */
    {
        fscanf(fichier,"\r%[^\\]\\ %s\n",telephone_temp,nom_temp);
        ajout(repertoire,index_telephone,telephone_temp,nom_temp);  /*on s'occupe du tableau d'index */
        repertoire->dernier++;        
    }
    fclose(fichier);
    SUPPRIMER_fichier(num_select);
}
<strike>SUPPRIMER_fichier(num_select);

</strike>Dans ton code initial, si le fichier c'est ouvert (fichier ! = NULL), mais que ton fichier est vide, tu ne rentre pas dans la condition. Et donc le flux de fichier n'est pas fermé c'est peut etre pour ca que la suppression ne marche pas.

++