Tester l'existance d'un répertoire [C]

WebCreator -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai eu beau chercher toute après-midi, j'ai rien trouvé. Alors avez vous un script en C qui teste l'existence d'un répertoire comme : c:/ ; d:/ ; e:/ ; f:/ ; g:/ ...

Merci d'avance!

2 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut,

    Tu peux faire comme cela :

    #include <sys/stat.h> 
    
    int main(int argc, char **argv) 
    { 
        struct stat  file_stat; 
    
        if (stat("c:\\",&file_stat) < 0) 
            return 1; 
    
        return 0; 
    }

    Dal
    1
    1. WebCreator
       
      merci je vais tester sa tout de suite!
      0
    2. WebCreator
       
      Re

      alors si j'ai bien compris :
      si stat("c:\\",&file_stat) < 0 -> le répertoire existe
      else -> le répertoire n'existe pas

      doit-je donner une valeur a : file_stat ?

      merci
      0
    3. WebCreator
       
      dsl je me suis trompé c'est l'inverse!
      et apparemment il n'y a pas de valeur a donné pour file_stat.
      mon script finale:
      #include <sys/stat.h> 
      int main(int argc, char *argv[])
      {
      struct stat  file_stat; 
      if (stat("c:\\",&file_stat) < 0){printf("Le repertoire c:\ n\'existe pas!! :(\n");}
      else {printf("Le repertoire c:\ existe! :D\n");}
          return 0;
      }
      

      merci beaucoup!
      0
    4. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      stat est une fonction du POSIX C, il y a sûrement des solutions plus adaptées à Windows.

      Elle définie ici :

      https://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html

      Si elle retourne -1, c'est qu'elle n'a pas pu accéder à la ressource.

      file_stat est une structure stat. Son contenu est peuplé par la fonction stat si la ressource est accessible.

      Dans l'exemple de code donné ci-dessus
      if (stat("c:\\",&file_stat) < 0) return 1;
      signifie je sors de main avec la valeur de retour 1 si "c:\" n'existe pas.


      Dal
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Rien de standard.

    En POSIX : DIR *opendir (const char *name) ou int stat(const char *file_name, struct stat *buf);

    Pour l'API Win :
    BOOL PathFileExists(LPCTSTR pszPath);
    https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-pathfileexistsa?redirectedfrom=MSDN

    Cdlt,
    0
    1. WebCreator
       
      merci mais je fais que du C moi pas du C++
      :D
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Ça tombe bien car tu peux l'utiliser en C :D
      0