Variable et nom fichier [Résolu]

chikusa 11 Messages postés dimanche 24 avril 2011Date d'inscription 24 août 2011 Dernière intervention - 15 juin 2011 à 10:29 - Dernière réponse : chikusa 11 Messages postés dimanche 24 avril 2011Date d'inscription 24 août 2011 Dernière intervention
- 15 juin 2011 à 16:08
Bonjours a tous,

J'essaye de faire un programme et je suis bloqué sur un petit détails, j'aimerais savoir comment on peux faire pour donner comme nom de fichier une valeur contenue dans une variable. Dans le programme sa sera l'utilisateur qui donnera le nom.
Par exemple :

string nom("john");
ofstream monFlux("C:\\User\\moi\\Documents\\Contact\\nom.txt");

The power is mine !!
Afficher la suite 

14 réponses

Répondre au sujet
BunoCS 13764 Messages postés lundi 11 juillet 2005Date d'inscription 20 avril 2018 Dernière intervention - 15 juin 2011 à 15:42
+3
Utile
Tu veux concaténer 2 chaines alors...
string chemin("C:\\repertoire\");
string extension(".txt");
string nom;
//... je te laisse le soin de récupérer le nom du contact
//... admettons que tu récupères "John"
chemin+=nom;
chemin+=extension;
// ici, chemin = "C:\\repertoire\\John.txt"
ofstream fichier(chemin);
// ... je te laisse continuer


Essaies d'être un peu plus précis la prochaine fois

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de BunoCS
Kizera 15 Messages postés vendredi 28 mai 2010Date d'inscription 15 juin 2011 Dernière intervention - 15 juin 2011 à 10:58
0
Utile
Eh bien si tu passes par cette méthode tu choisiras effectivement un nom à ton fichier mais ton souci est que si tu veut changer le nom du fichier lors de sa création il faut que tu passes par le programme.

Il y a plus simples et cela ce fait grâce aux arguments de ta fonction "main()".

int main (int argc, char *argv[]) // ou int main(int argc, char **argv)

Le paramètre argv est en réalité un tableau de pointeurs.
Le paramètre argc quant à lui, indique simplement le nombre de chaînes de caractères sur lequel pointe argv.

Fais un test et regarde le cours sur les paramètre de la fonction main c'est peu long et assez facile. En fait dans ta console lorsque tu veut exécuter ton programme (en admettant que ton exe se trouve dans "C:/Project/TonProg/nom.txt" ) tu n'as plus besoin de passer en paramètre la destination de ton fichier vu que tu va le faire dans la fenêtre de commande en fait. ton tableau de pointeurs en fait... dans sa première case (0) il va récupérer le nom de l'exécutable (fait un std::cout tu verras ;) ) que tu auras demander à ta fenêtre de commande d'exécuter. Ensuite à sa tu met un espace et tu écrit la destination en fait cela donnerai dans ta fenêtre :

C:/Project/TonProg/Debug/TonProg.exe "C:/Project/TonProg/nom.txt" avec les guillemets !!

La ton programme exécuterai "TonProg.exe" et contient en dans argv[0] cette chaîne.
Pour la chaîne de caractère entre guillemet cela correspond à ton argv[1] en gros tu passes argv[1] en paramètre et tu choisira sa destination et son nom au fichier.

Voila en espérant que c'est assez clair... sinon demande et je connais un tuto pas trop mal expliquer le sur site du zero : http://www.siteduzero.com/tutoriel-3-37162-les-parametres-de-la-fonction-main.html mais bon... je sais pas si c'est très bien ce que je fais là vu qu'on n'est sur code-source ^^" bref voila tchouss ! bonne chance
Commenter la réponse de Kizera
BunoCS 13764 Messages postés lundi 11 juillet 2005Date d'inscription 20 avril 2018 Dernière intervention - 15 juin 2011 à 11:33
0
Utile
Yop,
Dans le programme sa sera l'utilisateur qui donnera le nom.

Soit une invite de commande ("veuillez saisir le chemin du fichier")
Soit directement la boite de dialogue OpenFileDialog

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
chikusa 11 Messages postés dimanche 24 avril 2011Date d'inscription 24 août 2011 Dernière intervention - 15 juin 2011 à 14:34
0
Utile
Pour kizera, la fonction ne se passe pas dans le main mais dans une autre fonction.
Pour bruno, en fait j'aimerais que tout soit automatisé sans que l'utilisateur ai a s'en soucié.
Peut être que lors de la déclaration du flux avec ofstream on peut mettre directement la variable non?

Merci pour vos réponses


The power is mine !!
Commenter la réponse de chikusa
BunoCS 13764 Messages postés lundi 11 juillet 2005Date d'inscription 20 avril 2018 Dernière intervention - 15 juin 2011 à 14:41
0
Utile
la fonction ne se passe pas dans le main mais dans une autre fonction.

La "fonction", non, mais ton programme si, forcément.
j'aimerais que tout soit automatisé sans que l'utilisateur ai a s'en soucié.

C'est pas ce que tu disais: tu voulais que l'utilisateur donne le nom

Tu veux donc inscrire le chemin de ton fichier dans un fichier de conf, par exemple?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Kizera 15 Messages postés vendredi 28 mai 2010Date d'inscription 15 juin 2011 Dernière intervention - 15 juin 2011 à 14:48
0
Utile
eh bien chikusa sache que si tu n'as pas de main dans ton programme il va avoir un peu de mal à fonctionner mais tu peux récupérer les arguments du main en les passant en paramètre de ta fonction ;).

J'ai développé un petit benchmark pour une entreprise pour mon stage et je me suis servi de sa enfin la méthode que je t'ai expliqué avec mon vocabulaire... est celle que j'ai utilisé mais c'est pas beaucoup plus dur.

Tu passe en parametre ton argv[1] à ta fonction et aprés elle s'exécute en fonction de ton paramètre c'est tout aussi simple.
Commenter la réponse de Kizera
chikusa 11 Messages postés dimanche 24 avril 2011Date d'inscription 24 août 2011 Dernière intervention - 15 juin 2011 à 14:48
0
Utile
Imaginons le principe d'un carnet d'addresse. l'utilisateur entre les informations et apres le logiciel inscrit les informations dans un fichier. Ce qu'il faudrait c'est que ce fichier se nomme comme le contact rentré par l'intermediaire de la variable nom. L'utilisateur doit juste avoir a rentré les informations sur le contact.

The power is mine !!
Commenter la réponse de chikusa
BunoCS 13764 Messages postés lundi 11 juillet 2005Date d'inscription 20 avril 2018 Dernière intervention - 15 juin 2011 à 15:01
0
Utile
Euh..mince, je crois avoir compris: ne me dis pas que tu ne sais pas utiliser les variables quand même?
Bien sûr que tu peux faire ceci
string nom("john"); 
ofstream monFlux(nom);



@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Kizera 15 Messages postés vendredi 28 mai 2010Date d'inscription 15 juin 2011 Dernière intervention - 15 juin 2011 à 15:12
0
Utile
eh bien tu demande un nom à la personne comme te dit buno par exemple :

string nom(""); //initialisé à chaine vide
cout<<"nom svp ??\n";
cin>>nom;

ofstream monFlux(nom);


tu fais une chose comme sa (je l'ai fait avec cout car printf/scanf je ne sais pas trop m'en servir donc voila ;) ).
Commenter la réponse de Kizera
chikusa 11 Messages postés dimanche 24 avril 2011Date d'inscription 24 août 2011 Dernière intervention - 15 juin 2011 à 15:31
0
Utile
Si je sais me servir des variables, enfin j'espere
mais le truc c'est que si je fais sa, les fichiers seront dans le dossier ou est l'executable, j'aimerais que les fichiers soit par defaut a un endroit précis comme c:\ProgramData\ par exemple donc lors de la declaration de flux il y a une partie fixe : c:\ProgramData\ et une partie variable "nom_du_contact.
The power is mine !!
Commenter la réponse de chikusa
Kizera 15 Messages postés vendredi 28 mai 2010Date d'inscription 15 juin 2011 Dernière intervention - 15 juin 2011 à 15:40
0
Utile
eh bien tu fais comme je t'ai dis en passant par la console avec les arguments du main ou alors ben je crois que ton fichier si tu ne lui donne pas de destination précise il se crée dans le fichier de l'exécutable sinon je sais pas trop
Commenter la réponse de Kizera
BunoCS 13764 Messages postés lundi 11 juillet 2005Date d'inscription 20 avril 2018 Dernière intervention - 15 juin 2011 à 15:43
0
Utile
avec les arguments du main

Kizera, je crois que tu n'as bien ciblé le souci de notre ami

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
Kizera 15 Messages postés vendredi 28 mai 2010Date d'inscription 15 juin 2011 Dernière intervention - 15 juin 2011 à 15:50
0
Utile
a ouai avec la concaténation xD , je suis trop débile :p je vois mieux enfin plus précisement ce qu'il veut faire... oué ben toute façon il n'a plus d'autre choix xD c'est sa ou rien =)

Tchouss bonne aprem !
Commenter la réponse de Kizera
chikusa 11 Messages postés dimanche 24 avril 2011Date d'inscription 24 août 2011 Dernière intervention - 15 juin 2011 à 16:08
0
Utile
desolé de pas avoir pu être plus précis. et encore merci a tous. La concacténation est une bonne idée, bravo. Jemedemande pourquoi j'y ai pas pensé.

The power is mine !!
Commenter la réponse de chikusa

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.