SOS manque d'inspiration

graall Messages postés 27 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 2 novembre 2005 - 21 oct. 2004 à 16:59
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005 - 23 oct. 2004 à 15:48
J'ai besoin de faire un petit programme (en mode console) qui demande à l'utilisateur de saisir le nom d'un fichier et ensuite, qui vérifie si ce fichier existe.
Je ne vois pas du tout comment faire.
J'ai essayé de m'aider de cette source : http://www.cppfrance.com/code.aspx?ID=9263 mais je n'arrive pas à manipuler les const char.

Voici un exemple des essais que j'ai fais :

#include <conio.c>

bool fileexists(char file[100])
{
    /* c'est ici que je ne sais pas quoi mettre */
}    

int main()
{
    printf("Tapez le nom d'un fichier.\n");
    char fichier[100];
    scanf("%s",&fichier);
    if (fileexists(fichier))
        printf("\nLe fichier existe.");
    else
        printf("\nLe fichier n'existe pas.");
    getch();
}


merci d'avance

6 réponses

asmanur Messages postés 230 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 4 août 2005
21 oct. 2004 à 17:24
essaie
FILE* f= fopen(fichier,"rb");
if(!f)return false;
else return true;
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
21 oct. 2004 à 18:54
asmanur > l'inexistance d'un fichier n'est pas le seul cas ou son ouverture est impossible (par ex si il est ouvert en mode exclusif par un autre processus)

faudra passer par un appel systeme, sous windows win32, de mainiere portable voir chez POSIX
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
21 oct. 2004 à 20:43
Une maniere simple de procédé, consiste a prendre le chemin complet et a utiliser l'API FindFirstFile() puis regarder le résultat.

Shell
0
asmanur Messages postés 230 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 4 août 2005
22 oct. 2004 à 07:41
Ouep Je sais mais c quand même plus simpe que d'utiliser win surtout si on es encore sous dos
0

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

Posez votre question
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
23 oct. 2004 à 15:47
FILE* f= fopen(fichier,"rb");
if(!f)return false;
else return true;

Si le fichier n'existe pas, il est crée, donc ça ne teste pas s'il existait déjà.
La seule manière de faire, c'est de s'adresser au systeme de fichier.

sur systemes UNIX (qui se conforme donc au standard POSIX), on peut faire qqchose comme ca : (en C, non testé)

#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>

void main(int argc,char** argv)
{
struct stat stfile;
if(stat( argv[1], &stfile) == -1)
{
fprintf(stderr,"acces refusé à %s", argv[1])
}
if( (stfile.st_mode & S_IFMT) == S_IFREG) /* test pour un fichier régulier */
{
printf("le fichier regulier %s existe",argv[1]);
}
}

je pense que errno doit etre positionné, on doit pouvoir afficher un diagnostic complementaire avec perror.
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
23 oct. 2004 à 15:48
FILE* f= fopen(fichier,"rb");
if(!f)return false;
else return true;

Si le fichier n'existe pas, il est crée, donc ça ne teste pas s'il existait déjà.
La seule manière de faire, c'est de s'adresser au systeme de fichier.

sur systemes UNIX (qui se conforme donc au standard POSIX), on peut faire qqchose comme ca : (en C, non testé)

#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>

void main(int argc,char** argv)
{
struct stat stfile;
if(stat( argv[1], &stfile) == -1)
{
fprintf(stderr,"acces refusé à %s", argv[1])
}
if( (stfile.st_mode & S_IFMT) == S_IFREG) /* test pour un fichier régulier */
{
printf("le fichier regulier %s existe",argv[1]);
}
}

je pense que errno doit etre positionné, on doit pouvoir afficher un diagnostic complementaire avec perror.
0
Rejoignez-nous