C vérifier si le fichier existe
Dans un projet que j'ai à faire dans la norme C89-je vérifier si un fichier existe.
Comment puis-je faire cela?
Je pensais de l'aide
FILE *file;
if ((file = fopen(fname, "r")) == NULL)
{
printf("file doesn't exists");
}
return 0;
mais je pense qu'il peut y avoir plusieurs cas, alors le fichier n'existe pas, qui le fera fopen == NULL.
Comment dois-je faire? Je préfère ne pas utiliser comprend plutôt .
source d'informationauteur The GiG
Vous devez vous connecter pour publier un commentaire.
Si vous ne pouvez pas utiliser stat() dans votre environnement (ce qui est certainement la meilleure approche), il suffit d'évaluer errno. N'oubliez pas d'inclure errno.h.
Edit: oublié de wrap fclose dans un autre
Il est impossible de vérifier l'existence de certains pur de la norme ISO C.
Il n'y a pas vraiment un bon portable de façon à déterminer si un fichier nommé
existe; vous allez probablement avoir à recourir à des méthodes spécifiques.
Ce n'est pas un portable, c'est pourquoi je vais vous donner des OS des appels spécifiques.
Dans Windows que vous utilisez
GetFileAttributes
et vérifier un -1 de retour (INVALID_HANDLE
ou quelque chose comme ça).Dans Linux, vous avez
fstat
pour ce faire.La plupart du temps cependant, je viens de faire l'ouverture de fichier truc à tester, ou tout simplement aller de l'avant et utiliser le fichier et vérifier les exceptions en C++(C ++ /C#).
Je suppose que cela a plus à voir avec l'environnement système (comme POSIX ou BSD) qu'avec la version de C la langue que vous utilisez.
Dans POSIX il y a un stat() syscall qui va vous donner des informations sur un fichier, même si vous ne pouvez pas le lire. Toutefois, si le fichier est dans le chemin d'accès que vous n'avez pas les autorisations d'accès à il est toujours voué à l'échec, peu importe si le fichier existe.
Si vous n'avez pas accès au chemin alors il ne devrait jamais être possible de se pencher sur les fichiers contenus.
Voulez vous vraiment accéder au fichier? Une vérification est habituellement mieux avec la
d'accès(nom de fichier,F_OK)==0 de unistd.h et est assez large standard je pense.