Donner un nom à un fichier texte en C++ lors de sa création

nanettelmontpel Messages postés 16 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 11 septembre 2007 - 18 sept. 2005 à 14:24
nanettelmontpel Messages postés 16 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 11 septembre 2007 - 18 sept. 2005 à 18:19
Bonjour!!

Bon ben je crois que le titre résume bien la chose....

Voilà j'aimerais dans mon programme que lors de la création d'un fichier texte en C++ l'utilisateur puisse choisir le nom du fichier.
Comment faire???

Merci d'avance pour vos réponses

euh et pour le choix du thème désolée mais je ne savais vraiment pas quoi mettre... :s

12 réponses

dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
18 sept. 2005 à 15:04
FILE* Fichier;

char FileName[256];

cout << "Entrer le nom du fichier : ";

cin >> FileName;

Fichier = fopen(FileName,"a");

.....
0
nanettelmontpel Messages postés 16 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 11 septembre 2007
18 sept. 2005 à 15:35
Merci....!!
Il me reste encore une question..plutôt deux lool

Alors comment signifier au programme que c'est un fichier texte dans lequel j'enregistre, car pour l'insant il n'a pas de type précis.

Ensuite comment récupérer les données de CE fichier. Car dans mon programme je ne peux pas dire le nom du fichier... car on ne sait pas à l'avance quel nom va donner l'utilisateur.. et si je rentre FileName cela ne marche pas car il n'est pas défini à l'avance.

Merci d'avance pour la réponse
ps: je ne sais pas si j'ai été très claire....
0
dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
18 sept. 2005 à 15:53
pour ta première question, une fois avoir récupérer le nom du fichier,
il suffit de concaténer ".txt" à la fin : strcat(FileName,".txt"); voilà



pour la deuxième question va falloir être plus claire... Qu'est ce que
tu appel "récupérer les données de CE fichier" ? et quand tu dis que ça
ne marche pas, qu'as-tu fais ?
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
18 sept. 2005 à 15:53
Je ne vois pas ou est le probleme.

Tu peux écrire dans n'importe quel type de fichier sans que cela ne pose de probleme.

Meme un fichier sans extension peut accepter du texte.

La seule chose, c'est que tu saches sous quelle forme ces données sont
entrées pour pouvoir les réexploiter, surtout si ce sont des données de
configuration.



Si tu veux absolument donner une extension à ton fichier, l'extension est contenu dans le nom du fichier.



Pour ce qui est du nom du fichier, tu n'as qu'à le stoquer lors de la création, ou le demander à l'utilisateur.

Puis, tu ouvres le fichier (fopen) et lis le contenu (fscanf par exemple)

Si le fichier n'existe pas ou n'a pas pu etre ouvert, fopen te renvoie une erreur, à toi de vérifier.


Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nanettelmontpel Messages postés 16 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 11 septembre 2007
18 sept. 2005 à 15:59
Merci à vous deux pour votre réponse...


567912 dark_naruto25 en fait voilà ce que je fais quand je veux récupérer les données du fichier...


void Collection::Recuperer()
{
FILE*a;int i =0;
a=fopen(FileName,"r");
if(a==NULL) printf("PROBLEME4");
else
{
etc et c....
}
fclose(a);
};

Or FileName n'est pas reconnu car non défini ici... C'est plus clair?? ou pas??
0
dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
18 sept. 2005 à 16:12
Si tu ne le définit pas, c'est normal !!! Déclare la en globale et
n'oublie pas de la définir sinon il y a de forts risque de plantage...
0
nanettelmontpel Messages postés 16 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 11 septembre 2007
18 sept. 2005 à 16:18
ouha... euh désolée mais en plus clair ça donne koi? :( :(

J'ai défini char FileName[30]; au début de mon programme...mais que faut'il que je fasse d'autre? Désolée je suis un peu un boulet là... :(
0
dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
18 sept. 2005 à 16:27
ah ton avie, après cette ligne :

char FileName[30];

quel est le nom du fichier ?

et puis il faut le déclarer (la ligne en bleu) cette variable en
globale, c'est à dire en dehors de toutes fonctions, si tu veux que
toutes tes fonctions s'en serve !
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
18 sept. 2005 à 16:31
Qu'entends tu par "au début du programme"?

Parcque si tu la défini dans une fonction, elle ne sera certainement pas visible à l'exterieur de cette fonction.

Il faut, si tu veux l'utiliser dans plusieurs fonctions différentes,
que cette variable soit défini en globale, ou connu par toute te
classe..

Sinon, tu peux aussi modifier le prototype de ta fonction: void Collection::Recuperer(char *file)

Ainsi, tu donnes une chaine de caractères à ta fonction. La chaine de
car que tu donnes devra contenir le chemin d'acces au fichier.


Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
nanettelmontpel Messages postés 16 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 11 septembre 2007
18 sept. 2005 à 17:02
Bon en gros voilà certaines parties de mon programme....désolée mais je ne suis qu'étudiante... et pas en école d'info.... donc si c'était possible que vous soyez un peu plus clair.. peut être qu'en voyant ce que j'ai écrit ça sera plus clair non?

char FileName[30];
class Personne
{
protected: int Numero;
char nom[30];
public: void Afficher();
void Ajouter();
int getnum();
void Enregistrer(FILE*a);
void Recuperer(FILE*a);
Personne();
};



class Collection
{
protected: Personne tab[100];
int p;// Nombre de personnes effectivement dans la collection
public: Collection();
void Afficher();
void Ajouter();
void Supprimer();
void Enregistrer();
void Recuperer();
};
void Personne::Enregistrer(FILE*a)
{
fprintf(a,"%s\t",nom);
fprintf(a,"%d\n",Numero);
};



void Collection::Enregistrer()
{



FILE*a;int i=0;
cout<<"Entrer le nom du fichier: ";
cin>>FileName;
strcat(FileName,".txt");
a=fopen(FileName,"w");
if(a==NULL) printf("PROBLEME2");
else
{
for (i=0;i
void Personne::Recuperer(FILE*a)
{
printf("\nok1\n");
fscanf(a,"%s\t",nom);
printf("\nok2\n");
fscanf(a,"%d\n",&Numero);
printf("\nok3\n");
};


void Collection::Recuperer()
{
FILE*a;int i=0;
cout<<"Entrer le nom du fichier a recuperer: ";
cin>>FileName;
strcat(FileName,".txt");
a=fopen("FileName.txt","r");
if(a==NULL) printf("PROBLEME4");
else
{
while(!feof(a))
{
printf("%d",i);
tab[i].Recuperer(a);
i++;
}


p=i;
};
fclose(a);
};

Pour l'instant ça affiche "problème4" c'est donc qu'il ne trouve pas le fichier...
Voilà... désolée.. mais je suis vraiment une grosse boulette ... merci par avance pour le temps que vous prenez à me répondre.. désolée encore .. :s
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
18 sept. 2005 à 18:01
C'est pas grave, on est la pour aider aussi.

On aime bien trouver de l'aide qu'en on en cherche.



Voila ce que je vois:

Dans ta méthode Récupérer de la classe collection:
Tu fais un fopen de "FileName.txt", ce n'est pas du tout ce qu'il faut faire.

Il faut que tu fasses fopen(FileName, "r");

En deuxieme remarque, si tu fais ceci, ça risque encore et toujours de bugguer.

En effet, juste avant, tu fais un strcat(FileName, ".txt");

Mais tu as déja fait un strcat lors de la création de ce fichier.



Oulala, j'ai l'impression que je suis pas clair!!!

Allons y doucement.

1.-Lancement du programme

-->FileName contient n'importequoi.

2.-Appel de Collection::Enregistrer

a)Lecture du nom du fichier (disons qu l'on rentre le mot test comme nom de fichier)

-->FileName contient la chaine "test"

b)strcat avec l'extension

-->FileName contient la chaine "test.txt"

c)Sauvegarde de tes données + fermeture du fichier

-->On n'a pas toucher à FileName qui contient toujours "test.txt"

3.-Plus tard dans le programme (je sais pas quand tu fais l'appel à
cette fonction, donc plus tard), appel de la méthode
Collection::Récuperer()

-->FileName contient toujours "test.txt", donc pas besoin de strcat.

a)Ouverture du fichier: a=fopen(FileName, "r");

b)lecture des données

c)Fermeture du fichier



Voila, est-ce clair?

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
nanettelmontpel Messages postés 16 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 11 septembre 2007
18 sept. 2005 à 18:19
Merci!!!!!!!!!!!!!!!!!!!!!!!!

Merci beaucoup à vous deux...!!!!

Eh eh j'adore ce forum.. mais c'est grâce à vous :p

yahooooooooo c'est génial!!!

Merci et bonne fin de dimanche!!!
0
Rejoignez-nous