Aidez un noob!! ?clik:clik pa

Aidez un noob!! ?clik:clik pa - C - Programmation

Marsh Posté le 05-12-2004 à 14:13:43    

voila, je voudrais créer un programme qui entre autre ouvre un fichier dont le chemin d'accès contient des variables. Pour ca, j'ai fais un fprintf dans un fichier, que je supprime apres avoir fait un fscanf.
TAB contient donc le chemin d'accès complet, mais fopen(*p=TAB,"r" ) ne fonctionne pas correctement.
 
La, ca marche :

Code :
  1. void main (void)
  2. {FILE*fic;
  3. char*p="c:\\Documents and Settings\\Cédric\\Ma musique\\Rammstein.wma";
  4. fic=fopen(p,"r" );
  5. if(!fopen){}
  6. else puts(p);
  7. close(fic);
  8. system("PAUSE" );
  9. }


et ca affiche c:\\Documents and Settings\\Cùdric\\Ma musique\\Rammstein.wma
 
jusque la pas de problème,mais quand je fais avec un fscanf du fichier txt contenant le chemin d'accès p=c:\\Documents and Settings\\Cédric\\Ma musique\\Rammstein.wma et puis ca ouvre rien du tout.
Si vous avez lu jusque la, deja merci, et puis si vous pouvez me dire quoi faire encore plus merci!
A+

Reply

Marsh Posté le 05-12-2004 à 14:13:43   

Reply

Marsh Posté le 05-12-2004 à 14:36:05    

SuperGreu a écrit :

voila, je voudrais créer un programme qui entre autre ouvre un fichier dont le chemin d'accès contient des variables.


Tu veux dire une chaine élaborée à partir de variables, comme  
 
"NOM_<num>.txt" avec num ::= "000"-"999"
 
par exemple ?
 
Il faut définir un tableau de char de taille adaptée. (malloc() peut aider à faire du code 'autodémerdant').
 
Ensuite, il faut utiliser sprintf() (ou snprintf() en C99) pour écrire la chaine avec les conversions qui vont bien.

Code :
  1. char s[32];
  2.    int n = 123;
  3.    sprintf (s, "nom_%03d.txt", n); /* -> "nom_123" */
  4.    fopen (s, ...);


   


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 05-12-2004 à 15:55:08    

# if(!fopen){}
 
tu fais quoi là?

Reply

Marsh Posté le 05-12-2004 à 18:49:26    

rien du tout en fait je veu juste vérifier si le fichier existe...:S

Reply

Marsh Posté le 05-12-2004 à 18:52:45    

fopen est une fonction ...
 
en revanche tu peux tester la valeur de retour de la fonction fopen
 
man fopen

Reply

Marsh Posté le 05-12-2004 à 19:19:13    

je crois que le pb viens surtout du fait que dans mon premier exemple le programme ouvre c:\\...\\cùdric alor que quand je passe cette adresse via une chaine il ouvre c:\\...\\cédric  ...qu'est-ce que vous en pensez et qu'est-ce que je peux faire pour que les 2programmes ouvrent le meme fichier (cf premier topic)

Reply

Marsh Posté le 05-12-2004 à 19:29:20    

j'ai pas compris mais vires tes accents

Reply

Marsh Posté le 05-12-2004 à 19:45:27    

en gros :quand p = c:\\...\\cùdric sur la  console ca marche
et quand p=c\\...\\cédric ca marche pa...
(jentends par ù lespece de U avec un accent aigu)


Message édité par SuperGreu le 05-12-2004 à 20:22:57
Reply

Marsh Posté le 05-12-2004 à 22:21:47    

Les accents ne sont pas géré en C je crois.

Reply

Marsh Posté le 05-12-2004 à 22:31:52    

bien sur que si. Le C ne sait même pas ce que c'est de toutes façons. Ça marche très bien

Reply

Marsh Posté le 05-12-2004 à 22:31:52   

Reply

Marsh Posté le 05-12-2004 à 23:06:35    

SuperGreu a écrit :


et ca affiche c:\\Documents and Settings\\Cùdric\\Ma musique\\Rammstein.wma


 
déjà c'est pas normal que ça affiche des double "\"
 

SuperGreu a écrit :


 fichier txt contenant le chemin d'accès p=c:\\Documents and Settings\\Cédric\\Ma musique\\Rammstein.wma  


 
dans le fichier il faut des simples "\"
ce n'est que dans le code C que le "\" a un rôle spécial, pas dans les données lues...
 
Et pour le mélange des accents, c'est simplement que la console Windows n'utilise pas le même jeu de caractères que Windows j'imagine...


Message édité par antp le 05-12-2004 à 23:07:15

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 06-12-2004 à 17:26:35    

ok jai reessayé et j'ai fais ce que vous m'avez dit mais malheureusement ca ne résoud pas le problème . cette fois ca maffiche avec un fgets et un puts(p):C:\Documents and Settings\Mes Documents\Ma musique\Rammstein.wma  
et ca marche toujours pas....je comprend vraiment pas !

Reply

Marsh Posté le 06-12-2004 à 17:28:42    

C'est quoi le code actuel ? parce qu'avec le fopen bizarre...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 06-12-2004 à 17:43:38    

void main (void)
{char utilisateur[30],fic[100],*p;
FILE*test;
sprintf(fic,"C:\\Documents and Settings\\%s\\Mes Documents\\Ma musique\\Rammstein.wam",utilisateur);
p=fic;
test=fopen(p,"r" );
puts(p);
if(!test){} else
{fclose(test);
remove (p);}}[cpp]
je crois que c'est ca.PS: je n'ai pas copier la premiere partie du programme, mais on connait deja utilisateur.
sinon jen profite pour poser une question : pourquoi scanf suivi de puts ou printf naffiche pas les accents tandis qu'un fscanf suivi de puts ou printf le fait?
voila, merci d'avance!

Reply

Marsh Posté le 06-12-2004 à 17:57:36    

et en quoi ça ne marche pas dans ton code actuel ?  
parce que tu ne fais rien avec le fichier à part l'ouvrir et le fermer...
(enfin, faudrait peut-être donner une valeur à "utilisateur" )


Message édité par antp le 06-12-2004 à 17:58:16

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 06-12-2004 à 18:01:51    

bah on connai deja la valeur d'utilisateur
dans le cas d'un utilisateur ="cédric",ca ne marche pas.
et puis remove c bien pour supprimer un fichier nan? :S

Reply

Marsh Posté le 06-12-2004 à 19:47:38    

Taz a écrit :

bien sur que si. Le C ne sait même pas ce que c'est de toutes façons. Ça marche très bien


 
j'en ai mare d'apprendre des mauvaises choses en cours http://hellien.free.fr/smileys/god.gif
 
m'enfin, les accents dans le code j'aime pas donc c'est rien :]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed