C - fopen fichier non valide
Je me demande, comment faire pour vérifier si je suis de l'ouverture du fichier qui existe avec fopen? Je veux afficher un message lorsque l'utilisateur sélectionne un fichier avec un mauvais nom. Est doit être une simple vérification, mais je ne suis pas en mesure de le résoudre.
Grâce
OriginalL'auteur Waypoint | 2011-04-10
Vous devez vous connecter pour publier un commentaire.
dans vos param liste:
alors:
C'est la seule option possible, parce que si le fichier est corrompu, il ne se charge pas comme un programme, par exemple, mais il sera en mesure de lire ses caractères char par char(ou d'une ligne ou plus).
Non, il n'est pas. Il pourrait être un problème de permission sur le fichier ou le chemin d'accès. Il pourrait être une ressource d'allocation d'erreur aussi (fopen peut appeler
malloc
, qui peut échouer). En disant: "aucun fichier" lorsque le problème peut être complètement différent, c'est une mauvaise pratique qui rendra le débogage plus difficile.D'autres erreurs possibles (à partir de la page de manuel linux pour
open
, qui sont aussi les erreurs possibles pourfopen()
): Trop de liens symboliques, le Nombre maximal de fichiers ouverts pour ce processus atteint, le chemin d'accès est trop long, le Nombre maximal de fichiers ouverts pour le système atteint, pas assez de mémoire du noyau, nom non valide pour le système de fichier, le fichier est trop gros.OriginalL'auteur Batman
Quand
fopen
échoue, elle renvoieNULL
et définiterrno
pour indiquer le type d'erreur.Vérifier la valeur de retour, et si c'est
NULL
vérifiererrno
. Vous pouvez utiliser des fonctions commeperror
oustrerror
pour afficher les messages au sujet de ces erreurs.OriginalL'auteur Mat
Pour le rendre encore plus clair:
Mais, probablement, vous ne voulez pas utiliser
fopen
pour vérifier l'existence et le droit d'accès. Vous devriez regarderstat
etaccess
. Les deux sont disponibles dans les bibliothèques C et à l'aide de l'hommeNotez que l'accès et la stat ne sont pas C (ils sont POSIX).
Vous avez raison. Je me souviens d'un accès sur chaque plate-forme, j'ai travaillé sur mais apparemment il n'est pas standard.
OriginalL'auteur seth
C'est simple: le retour de l'
FILE*
pointeur seranull
si le fichier n'existe pas.Bien sûr, cela suppose que vous êtes d'ouverture dans
r
, mode lecture.NULL
si il n'a pas les autorisations appropriées, par exemple.À cet effet, vous devez savoir ce que vous voulez que votre code ne.
Quel est le bon vieux
perror
?OriginalL'auteur Jack
Voir les erreurs possibles pour
open
:Cependant, je pense que vous aurez du mal à trouver un moyen de déterminer qu'un nom de fichier est invalide. Sur la plupart des systèmes (à l'exception de Windows) toute chaîne qui n'est pas trop long est potentiellement valable (modulo
/
être interprété comme un séparateur de chemin d'accès).OriginalL'auteur R..