Problème avec la fonction fopen

Problème avec la fonction fopen - Programmation

Marsh Posté le 19-09-2001 à 18:30:01    

Voilà la fonction fopen : fopen("NOMDUFICHIER","R" ). Bon j'ai mis "r" mais ça aurais pu être autre chose. Enfin dans mon cas c'est bien "r"...
Le but de mon programme (en C) est d'ouvrir un fichier dans le but de savoir s'il existe.
Donc je rentre le nom du fichier avec la commande scanf (type chaine de caractère) et mon problème est donc de faire figurer ce nom de fichier comme une chaine de caractères à la place de NOMDUFICHIER dans la commande fopen.
or il est impossible de faire :" fopen ("%s","r",filename) " puisque là il y aurais trop de paramètre dans la fonction fopen...
Please aidez moi!!!!

Reply

Marsh Posté le 19-09-2001 à 18:30:01   

Reply

Marsh Posté le 19-09-2001 à 18:46:25    

#include <stdio.h>
 
 int main(void)
{ char ch[80];
 
  printf("*-*-*-*-* --Recherche d'un fichier-- *-*-*-*-*\n\n" );
  printf("Ecrivez le nom du fichier a chercher : \n" );
  scanf("%s", &ch);
  printf("Recherche du fichier %s :\n",ch);
    if (fopen("????????","r" ) == NULL) {printf("Ce fichier n'existe pas!\n" );}
      else printf("Ce fichier existe!\n" );
  return 0;
}
 
-----------------------------------------------------------------
Voilà le code source du prog (pas définitif j'en ai bien peur...).

Reply

Marsh Posté le 19-09-2001 à 18:52:19    

heu,
 
voici un exemple d'utilisation d'une fonction fopne
 
#include <stdio.h>
 
int main(void)
{
   FILE *in, *out;
 
   if ((in = fopen("\\AUTOEXEC.BAT", "rt" ))
       == NULL)
   {
      fprintf(stderr, "Cannot open input file.\n" );
      return 1;
   }
 
   if ((out = fopen("\\AUTOEXEC.BAK", "wt" ))
       == NULL)
   {
      fprintf(stderr, "Cannot open output file.\n" );
      return 1;
   }
 
   while (!feof(in))
      fputc(fgetc(in), out);
 
   fclose(in);
 
   fclose(out);
   return 0;
}

Reply

Marsh Posté le 19-09-2001 à 19:18:50    

y a la fonction "access" definie ds stdio.h pr verifier l'existence d'un fichier

Reply

Marsh Posté le 19-09-2001 à 19:39:06    

Ah ouais, si c pas le même problème qu'avec fopen ça peut être bon. Comment elle marche cette fonction?

Reply

Marsh Posté le 19-09-2001 à 20:45:45    

Si tu mets ch à la place des ???, ça ne marche pas?

Reply

Marsh Posté le 19-09-2001 à 21:04:28    

Non... à mon avis quand je met juste ch ça cherche le fichier s'appellant "ch" et pas "la valeur de ch".

Reply

Marsh Posté le 19-09-2001 à 21:13:20    

fab51 a écrit a écrit :

Non... à mon avis quand je met juste ch ça cherche le fichier s'appellant "ch" et pas "la valeur de ch".  



Je vais faire un tour dans le source de mon prog, et je te dis koman G fais.

Reply

Marsh Posté le 19-09-2001 à 21:15:56    

humm,
 
bon en premier tu fais un prog avec fopen et pas de fclose. commence deja par ça, parceque ca fait pas honneur au forum :D
 
ensuite en C que tu donnes juste le nom d'une chaine en param ça correpond en fait a son adresse c'est pas comme avec les int, long ou char (pour un carac seul)
 
alors essaie on va quand même pas l'essayer pour toi :D

Reply

Marsh Posté le 19-09-2001 à 21:20:42    

Bon première chose, c'est pas la peine de faire ton malin, tu vois bien que je débute. Et deuxièmement j'ai bien essayé de mettre ch et ça marche pas!!!

Reply

Marsh Posté le 19-09-2001 à 21:20:42   

Reply

Marsh Posté le 19-09-2001 à 21:24:48    

char chemin[256];
scanf("%s", &chemin);
fopen(chemin,"rt" );
 
Chez moua, sa marche.

Reply

Marsh Posté le 19-09-2001 à 21:27:21    

Ah oui c bon c cool ça marche! J'avais toujours laissé les "" c t pour ça. Sorry Dav Vador!

Reply

Marsh Posté le 19-09-2001 à 21:30:04    

he,
 
faut pas avoir honte de débuter, mais en info faut tester, c'est pas 100 fois sur le métier, ... mais 1000 fois.

Reply

Marsh Posté le 19-09-2001 à 21:44:18    

Oui, je suis tout à fait d'accord avec toi!
Euh... encore une ch'tite chose, comment on fait pour dire au prog de scanner tel ou tel répertoire du disque (ou même le disque entier d'un seul coup si ça existe!!!!)?

Reply

Marsh Posté le 19-09-2001 à 21:48:04    

oulala,
ça fait un b
out de temps que je n'ai pas fais ça et encore c'était sous dos :D. A moins qu'il existe une fonction toute prete, tu ne peux scanner que répertoire par répertoire.
 
Le truc c'est de faire une fonction recursive, mais bon s'il y avait quelqu'un qui ait travaillé récement la-dessus ça serait mieux que moi.

Reply

Marsh Posté le 19-09-2001 à 21:50:22    

Avec Turbo pascal, y'avait findfirst et findnext pour scanner 1 rep. Avec Borland C++, je pense que ces routines existent aussi, mais je ne suis pas sur...

Reply

Marsh Posté le 19-09-2001 à 22:25:05    

Et comment on fait pour faire scanner au programme un répertoire précis?

Reply

Marsh Posté le 20-09-2001 à 01:19:52    

la methode la plus portable est d'utiliser stat() [unix (mac??)] ou _stat() [windows]
 

Citation :

#include <sys/types.h>
#include <sys/stat.h>
 
void main( void )
{
   struct stat buf;  // windows: struct _stat buf;
   int result;
 
   /* Get data associated with "stat.c": */
   result = stat( "le_full_path_du_fichier", &buf );
   // windows: result = _stat( "le_full_path_du_fichier", &buf );
 
   /* Check if statistics are valid: */
   if( result != 0 )
   // le fichier n'existe pas...
}


A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 20-09-2001 à 01:30:11    

et si tu code pour windows, c'est FindFirstFile et FindNextFile de l'api win32 ou sinon la classe CFileFind des MFC. Pour un exemple de parcours recurssif de l'arborescence regarde ici http://forum.hardware.fr/forum2.ph [...] &owntopic=

Reply

Marsh Posté le 20-09-2001 à 07:01:16    

Ouais mais tout ça c'est du C++ on dirais...

Reply

Marsh Posté le 20-09-2001 à 08:35:20    

pas les FindFirstFile et FindNextFile, l'exemple c'est du ++ mais les deux autres fonctions viennent de l'api win32 et tu peux les utiliser en c directos.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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