Prob d'ouverture de fichier

marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011 - 24 mars 2011 à 17:52
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011 - 25 mars 2011 à 16:04
bonjour,
j'essais d'écrire un programme qui permet de faire un traitement de texte en utilisant les listes chainées doubles.le code compile bien et tout mais le premier probleme ue je rencontre c'est que le prog ne veut pas ouvrir le fichier que j'indique et affiche à chaque fois "fichier inexistant" or il existe et le plus bizarre dans tout ça c'est que j'utilise tjrs cette fonction et elle fonctionne
voici mon code, et s'il y a d'autres erreurs,me corriger svp,l'utilitaire permet d'afficher à partir de la ligne n1 un nbre n2 de lignes.voila!


#include <string.h>
#include <stdio.h>
#include <stdlib.h>

struct dllist {
 char *s;
 struct dllist *next;
 struct dllist *prev;
};

struct dllist *head, *tail;

void append_node(struct dllist *lnode);
void insert_node(struct dllist *lnode, struct dllist *after);
void remove_node(struct dllist *lnode);
void ouvrir(char*mot, FILE **fp);
void utilitaire1(char *argv[],struct dllist *lnode,int pos,int nbr);

int main(int argc, char **argv) {
 struct dllist *lnode;
FILE *fp;char f[100];
int pos,nbr;
 if(3>argc)
{printf("utilisation incorrecte!!!");exit(0);}
ouvrir(argv[1],&fp);
sscanf(argv[3],"%d",&pos);
sscanf(argv[4],"%d",&nbr);
 /* add some numbers to the double linked list */
 while(fgets(f,100,fp)) {
  lnode = (struct dllist *)malloc(sizeof(struct dllist));
  strncpy(lnode->s,f,strlen(f));
  append_node(lnode);
 }
fclose(fp);
 /* print the dll list */
 for(lnode = head; lnode != NULL; lnode = lnode->next) {
  printf("%s\n", lnode->s);
 }
if (strcmp(argv[2],"view")==0) utilitaire1(argv,lnode,pos,nbr);
 /* destroy the dll list */
 while(head != NULL)
  remove_node(head);

 getchar();
return EXIT_SUCCESS;
}

void append_node(struct dllist *lnode) {
 if(head == NULL) {
  head = lnode;
  lnode->prev = NULL;
 } else {
  tail->next = lnode;
  lnode->prev = tail;
 }

 tail = lnode;
 lnode->next = NULL;
}

void insert_node(struct dllist *lnode, struct dllist *after) {
 lnode->next = after->next;
 lnode->prev = after;

 if(after->next != NULL)
  after->next->prev = lnode;
 else
  tail = lnode;

 after->next = lnode;
}

void remove_node(struct dllist *lnode) {
 if(lnode->prev == NULL)
  head = lnode->next;
 else
  lnode->prev->next = lnode->next;

 if(lnode->next == NULL)
  tail = lnode->prev;
 else
  lnode->next->prev = lnode->prev;
}

void utilitaire1(char *argv[],struct dllist *lnode,int pos,int nbr)
{int i,j;
   struct dllist  *courant ;
  for (i = 1; i < pos; ++i)
    courant = courant->next;
    if (pos == i)
    {
        for (j=i;j<nbr;++j)
    printf("%s\n",courant->s); }
}
void ouvrir(char*mot, FILE **fp)
{
if(!(*fp=fopen(mot,"r")))
{
printf("le fichier est inexistant");
exit(0);
}
else printf("ouverture du fichier... \n");
}

2 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
25 mars 2011 à 13:56
salut,

"if(!(*fp=fopen(mot,"r")))" n'indique pas que le fichier est inexistant mais que la fonction est en echec. Suivant le système que tu utilises, tu peux obtenir le type d'erreur exact.

A mon avis, c'est un fichier crée en root que tu tentes d'ouvrir avec un compte user.


@++
0
marooh Messages postés 122 Date d'inscription vendredi 8 octobre 2010 Statut Membre Dernière intervention 16 novembre 2011
25 mars 2011 à 16:04
le fichier que je tente d'ouvrir se trouve dans le meme dossier que l'executable donk je ne vois pas pourquoi ça bloque et le ce qui est bizarre c'est que elle a fonctionné au paravant
0
Rejoignez-nous