C / fonction fopen

Fermé
Loxi - 4 janv. 2009 à 20:27
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 27 nov. 2010 à 00:32
Bonsoir a tous !!

Voila j'ai un problème bien ennuyeux avec la fonction fopen

elle s'utilise normalement ainsi : fichier = fopen("test.c", "a");

mais je désirerait que test.c et a (dans mon exemple) soit des variables de types char que je peux definir avant, soit :

char nomfichier[128];
char mode ouverture[4];
fgets(nomfichier, sizeof nomfichier, stdin);
fgets(modeouverture, sizeof modeouverture, stdin);
fichier = fopen(nomfichier, modeouverture);

Seulement, il n arrive pas a ouvrir le fichier que je demande, a chaque coup et peut importe les paramètres :(

Que manque t'il ? est-ce une histoire de pointeurs?

Merci de votre aide !!

1 réponse

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
4 janv. 2009 à 22:04
salut,
en faisant cela ça fonctionne....c'est la fonction fgets qui fout un peu le bordel....
int main()
{FILE*fp;
char nomfichier[128];
char mode[4];
printf("nom\n\r");
gets(nomfichier);
printf("mode\n\r");
gets(mode);
fp=fopen(nomfichier,mode);
...
....
fclose(fp);
return 1;
}
J'espere ça pourra t'aider...
1
Voila mon code qui foire encore : le message d'erreur est sur l ouverture du fichier et il me renseigne comme nom de fichier le mode que j ai choisi...bizarre



int dev()
{
FILE* fichier = NULL;

char dir[128];
char mode[4];
char texte[10000] = {0};

printf("nom\n\r");
gets(dir);
printf("mode\n\r");
gets(mode);

fichier = fopen(dir, mode);
if (fichier != NULL)
{
fgets(texte, sizeof texte, stdin);
fprintf(fichier, "%s", texte);

fclose(fichier);
}

else
{
printf("\nImpossible d'ouvrir le fichier %s", dir);
}
}
0
mea culpa ca fonctionne bien, je ne sais pas trop ce qui a changé mais ca fonctionne !

Merci grandement a toi :)

code :

int dev()
{
FILE* fichier = NULL;

char dir[128];
char mode[4];
char texte[10000] = {0};

printf("nom\n\r");
gets(dir);
printf("mode\n\r");
gets(mode);

fichier = fopen(dir, mode);
if (fichier != NULL)
{
fgets(texte, sizeof texte, stdin);
fprintf(fichier, "%s", texte);

fclose(fichier);
}

else
{
printf("\nImpossible d'ouvrir le fichier %s", dir);
}
}
0
salut,

je crois, sauf erreur de ma part, qu'on peut remplacer :

printf("nom\n\r");
gets(nomfichier);

par :

sprintf(nomfichier, "%s", nom);

tout dépend des besoins du code bien sûr ;)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 juil. 2010 à 21:19
Vous déterrez un post qui date de plus d'un an...
De plus, vous faites erreur.
Je vois pas comment on peut remplacer une fonction d'affichage à l'écran (printf) et une fonction d'entrée (gets) par une simple fonction d'affichage dans une variable (sprintf).
Cdlt,
0
je déterre ce post parce que je cherchais justement à ouvrir des fichiers dans le nom serait contenu dans un tableau de char.

Pour sprintf cette fonction inscrit la chaine de caractères en paramètre dans le tableau de chars. (je peux me tromper je suis encore un débutant).

Mais pour ce post, il me semble pas qu'on avait spécifiquement besoin d'un affichage.

De mon côté, ma fonction ne marche pas très bien alors je suis pas sûr que c'est très optimisé.
0