2010-08-22 12 views
1

Je suis en train de faire un programme simple qui gère les fichiers et les répertoires, mais j'ai deux problèmes majeurs:Comment savoir si un fichier ou un répertoire existe?

  • comment puis-je vérifier si un fichier ou un répertoire existe ou non, et
  • comment puis-je savoir s'il s'agit d'un fichier, d'un répertoire, d'un lien symbolique, d'un périphérique, d'un tuyau nommé, etc.? Pour l'instant, les fichiers et les répertoires sont importants, mais j'aimerais aussi connaître les autres.

EDIT: Trop tous ceux qui suggère d'utiliser stat() ou une fonction similaire, j'ai déjà examiné cette question, et alors qu'il pourrait répondre à ma première question, je ne peux pas comprendre comment il répondre à la seconde ...

+0

Sur quel système d'exploitation travaillez-vous? – Starkey

+0

@Starkey Linux. – Frxstrem

Répondre

6

Puisque vous renseigner sur les pipes nommés/etc liens symboliques, vous êtes probablement sur * nix, donc utilisez la fonction lstat()

struct stat info; 

if(lstat(name,&info) != 0) { 
    if(errno == ENOENT) { 
    // doesn't exist 
    } else if(errno == EACCES) { 
    // we don't have permission to know if 
    // the path/file exists.. impossible to tell 
    } else { 
     //general error handling 
    } 
    return; 
} 
//so, it exists. 

if(S_ISDIR(info.st_mode)) { 
    //it's a directory 
} else if(S_ISFIFO(info.st_mode)) { 
    //it's a named pipe 
} else if(....) { 
} 

Docs here pour les macros S_ISXXX que vous pouvez utiliser.

+0

merci, c'était juste ce que je cherchais: D – Frxstrem

2

La fonction stat() devrait vous donner tout ce que vous cherchez (ou plus précisément lstat() puisque stat() suivra le lien).

1

Utilisez stat (ou si vous souhaitez obtenir des informations sur un lien symbolique au lieu de suivre et obtenir des informations sur la destination, lstat)

NOM

stat - obtenir le statut de fichier

SYNOPSIS

#include <sys/stat.h> 

int stat(const char *restrict path, struct stat *restrict buf); 

DESCRIPTION

La fonction stat() doit obtenir des informations sur le fichier nommé et l'écrire dans la zone pointée par l'argument buf. L'argument chemin pointe vers un nom de chemin nommant un fichier. Lire, écrire ou exécuter l'autorisation du fichier nommé n'est pas requis. Une implémentation qui fournit des mécanismes de contrôle d'accès aux fichiers supplémentaires ou de remplacement peut, dans des conditions définies par l'implémentation, provoquer l'échec de stat(). En particulier, le système peut nier l'existence du fichier spécifié par path.

Si le fichier nommé est un lien symbolique, la fonction stat() doit poursuivre la résolution du chemin d'accès en utilisant le contenu du lien symbolique et doit renvoyer les informations relatives au fichier résultant si le fichier existe.

L'argument buf est un pointeur vers une structure de statistiques, telle que définie dans l'en-tête, dans laquelle des informations sont placées concernant le fichier.

Questions connexes