IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Erreur lors de la suppression du fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut Erreur lors de la suppression du fichier
    Bonjour,

    je suis entrain de concevoir des logiciels mais j'ai un petit problème.

    Disons qu'après exécution je dois effacer mon *.exe, je le fais et j'ai "Erreur lors de la suppression du fichier..." le message windows pour dire que je peut pas l'effacer.

    C'est assez embêtant.

    Comment faire pour qu'il l'effacer directement, voilà mon code source:

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    /*structure pour pouvoir retourner 2 variables*/
    typedef struct _pxy{
           int x;
           int y;
           } pxy;
     
    /* entrer ici la grille a resoudre (0 = case vide)
     (ou completer le programme avec une interface graphique :D)
    ci-join un exemple de grille "dur" a resoudre par le programme
    (merci a Stumpy pour la grille)
     
    note : le fait d'utiliser 3 tables prend plus de memoire
    et necessite legerement plus de temps d'ecriture, par contre
    les tests de validité d'une valeur doivent etres plus simples.
     
    */
     
     
    /* table representant les collones de la grille*/
    int col[9][9]=
    {
    {0,0,0 ,0,0,0 ,0,0,0},
    {0,0,0 ,0,0,3 ,0,8,5},
    {0,0,1 ,0,2,0 ,0,0,0},
     
    {0,0,0 ,5,0,7 ,0,0,0},
    {0,0,4 ,0,0,0 ,1,0,0},
    {0,9,0 ,0,0,0 ,0,0,0},
     
    {5,0,0 ,0,0,0 ,0,7,3},
    {0,0,2 ,0,1,0 ,0,0,0},
    {0,0,0 ,0,4,0 ,0,0,9},
    };
     
    /*transposé de col */
    int ligne[9][9];
     
    /*valeures en coordonées de groupe*/
    int part[9][9];
     
     
     
     
    /*---------------------fonctions de calculs anexes------------------*/
     
    /*genere x et y a partire de la position pos*/
    pxy genxy(int pos)
    {
      pxy p;
      p.x = pos%9;
      p.y = (pos-p.x)/9;
      return p;
    }
     
    /*genere les coordonées de groupe a partir de x et y*/
    pxy genpxy(int x, int y)
    {
      pxy p;
      p.y = x%3+3*(y%3) ;
      p.x = (x-x%3)/3+(y-y%3);
      return p;
    }
     
    /*initialisation de col et part*/
    void init(void)
    {
      int x,y;
      pxy p;
      for (x=0;x<9;x++)
           for (y=0;y<9;y++){
                ligne[y][x]= col[x][y];
                p=genpxy(x,y);
                part[p.x][p.y]=col[x][y];
                }
    }
     
    /*si la position est valide en ligne, en colonne et en groupe retourne 1. sinon 0*/
    int valide(int val, int x, int y, pxy p)
    {
      int i;
      for (i=0;i<9;i++)
          if (ligne[y][i] == val)
             return 0;
      for (i=0;i<9;i++)
          if (col[x][i] == val)
             return 0;
      for (i=0;i<9;i++)
          if (part[p.x][i] == val) /*on reste sur le bloc et on regarde les cases*/
             return 0;
      return 1;
    }
     
    /*ajout d'un nombre validé*/
    void add(int val,int x, int y,pxy p)
    {
      ligne[y][x] = val;
      col[x][y] = val;
      part[p.x][p.y] = val;
    }
     
    /*retrait d'un nombre incorect (ne fait rien si la case est vide)*/
    void del(int x, int y,pxy p)
    {
      ligne[y][x] = 0;
      col[x][y] = 0;
      part[p.x][p.y] = 0;
    }
     
     
     
    /*--------------la fameuse fonction recurcive!----------*/
     
    int calcul(int position)
    {
      int i;
      pxy c,p;
     
      /*on genere les coordonnées de travail*/
      c=genxy(position);
      p=genpxy(c.x,c.y);
     
      /*si on sort de la grille->fini*/
      if (position == 81)
         return 1;
     
      /*si la case est deja pleine->suivante*/
      if (col[c.x][c.y] != 0)
         return calcul(position+1);
     
      /*les chiffres valides vont de 1 a 9*/
      for (i=1;i<10;i++)
          {
    	  /*si le chiffre rentre on le met...*/
          if (valide(i,c.x,c.y,p)==1)
             {
             add(i,c.x,c.y,p);
    		 /*... et si la grille s'est bien completé, on averti la fonction appelante que c'est ok*/
             if (calcul(position+1)==1)
                return 1;
             }
          }
      /*si aucune valeur ne convien on retire la valeur qui ne marche pas...*/
      del(c.x,c.y,p);
      /*et on signal que la grille est bloqué*/
      return 0;
    }
     
     
     
    /*---------------------------fonction d'affichage---------------------------*/
     
    void affiche(void)
    {
      int x,y;
      pxy p;
      for (x=0;x<9;x++)
          {
          if (x%3==0)printf(" --- --- ---\n");
             for (y=0;y<9;y++)
                 {
                 if(y%3==0)printf(" ");
                 if(col[x][y] != 0)printf("%d",col[x][y]);
                 else printf(".");
                 }
           printf("\n");
           }
      printf("\n");
    }
     
     
     
    /*---------------------------main---------------------------*/
    int main()
    {
      /*on prepare toutes les grilles*/
      init();
      /*on affiche la grille initiale*/
      affiche();
     
     
      /*on lance la calcul*/
      calcul(0);
      /*on affiche la grille resolue (si la grille n'a pas de solution il faudra s'armer de patience ;)*/
      affiche();
     
     
     
      /* cette ligne est utile si vous etes sous windows et que vous n'utilisez pas la console*/
      system("PAUSE");
      return 0;
    }

    C'est celui dans les sources C, le solveur de sudoku.

    donc si vous voyez pourquoi, merci

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kynri Voir le message
    Disons qu'après exécution je dois effacer mon *.exe, je le fais et j'ai "Erreur lors de la suppression du fichier..." le message windows pour dire que je peut pas l'effacer.

    C'est assez embêtant.

    Comment faire pour qu'il l'effacer directement, voilà mon code source:
    <...>
    Dans del(), n'importe laquelle de ces 3 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       ligne[y][x] = 0;
       col[x][y] = 0;
       part[p.x][p.y] = 0;
    provoque un bouclage infini de l'algorithme...

    Pour quitter, tu fais donc Ctrl-break, laissant le fichier .exe en mode lecture... Il ne peut donc plus être effacé...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut
    Pour quitter, tu fais donc Ctrl-break, laissant le fichier .exe en mode lecture... Il ne peut donc plus être effacé...
    ça n'as pas trop de sens ta phrase, non ?

  4. #4
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    Ce qu'Emmanuel veut dire, c'est que de fermer un programme avec Ctrl-Break laisse le fichier ".exe" ouvert, donc on ne peut pas le supprimer, c'est tout. Enfin ça me parait aussi bizarre, si tu fermes un prog avec Ctrl-Break ça devrait le terminer complètement et donc le fichier .exe devrait être éditable...

    Mais question : est ce que tu es sur que ton programme s'arrette ? Si tu regardes la liste des taches / processus, est ce qu'il est toujours là ?

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Pacorabanix Voir le message
    Mais question : est ce que tu es sur que ton programme s'arrette ? Si tu regardes la liste des taches / processus, est ce qu'il est toujours là ?
    Tu as raison. Le problème doit plutôt être là. Comme le processus tourne toujours, on ne peut supprimer le fichier.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut
    je reviens avec de bonnes nouvelles,

    J'ai toujours pas compris le :
    fermer un programme avec Ctrl-Break
    mais bon.

    Alors, j'ai utiliser mon programme normal, après qu'il s'est arrêté j'ai voulu le supprimer mais impossible

    Alors j'ai utiliser un logiciel, qui regarde les fichiers chargés en mémoire d'un processus.
    J'ai chercher et j'ai trouver que "untitled.exe" est en mémoire par le programme "TeaTimer.exe".

    untitled.exe : c'est mon solveur de sudoku
    TeaTimer.exe : c'est une extension de spybot seach and destroy, qui permet d'autoriser ou pas les logiciels qui veulent se lancer au démarrage de Windows.

    Alors j'ai déchargé le fichier "untitled.exe" de "TeaTimer.exe" et j'ai pu supprimer "untitled.exe"

    Donc voilà, le problème est qu'il est chargé en mémoire par un autre processus, et je voudrais bien savoir comment empêcher ça : pour que l'autre processus ne se mêle pas de mon programme.

Discussions similaires

  1. Msg erreur lors de la suppression d'un fichier
    Par saidiweb dans le forum Windows XP
    Réponses: 3
    Dernier message: 20/05/2007, 17h02
  2. Réponses: 14
    Dernier message: 04/05/2006, 07h40
  3. Réponses: 2
    Dernier message: 07/12/2005, 18h32
  4. [DOM] Erreur lors du parsing d'un fichier XML par l'API DOM
    Par patricetoan dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 26/09/2005, 12h43
  5. [CONNECTION] Erreur lors du connect dans le fichier C
    Par Petey dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 19/04/2004, 18h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo