Outils d'utilisateurs

Outils du Site


c_1y_file_system

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

c_1y_file_system [2014/03/13 21:55]
188.141.132.194 [Gérer les permissions d'accès]
c_1y_file_system [2014/10/05 15:12] (Version actuelle)
91.182.106.28 [Les classes et énumérations]
Ligne 5: Ligne 5:
 ===== Les classes et énumérations ===== ===== Les classes et énumérations =====
  
-Le draft [[https://github.com/cplusplus/filesystem-ts|N3803]] est relativement simple à lire, puisqu'il n'y a pas de modification du langage, mais simplement des ajouts sous forme de bibliothèque. Ceux qui ont déjà utilisé une bibliothèque de gestion de fichiers retrouveront des éléments familiers. Du coup, je ne vais pas reprendre en détail le document (ce qui reviendrait en gros à le traduire), mais je vais donner des exemples de code pour répondre à des problématique spécifiques. Pour ceux intéressé par les détails, je vais juste décrire l'organisation du draft.+Le draft [[https://github.com/cplusplus/filesystem-ts|N3803]] est relativement simple à lire, puisqu'il n'y a pas de modification du langage, mais simplement des ajouts sous forme de bibliothèque. Ceux qui ont déjà utilisé une bibliothèque de gestion de fichiers retrouveront des éléments familiers. Du coup, je ne vais pas reprendre en détail le document (ce qui reviendrait en gros à le traduire), mais je vais donner des exemples de code pour répondre à des problématiques spécifiques. Pour ceux intéressés par les détails, je vais juste décrire l'organisation du draft.
  
 Le document commence à définir un ensemble de notions généralistes sur les systèmes de fichiers : ce qu'est un fichier, un répertoire, un nom de fichier ou de répertoire, un lien, ainsi que les notions de chemin absolu, relatif ou canonique. Le document commence à définir un ensemble de notions généralistes sur les systèmes de fichiers : ce qu'est un fichier, un répertoire, un nom de fichier ou de répertoire, un lien, ainsi que les notions de chemin absolu, relatif ou canonique.
  
-Ensuite, le document décrit les différentes types :+Ensuite, le document décrit les différents types :
  
   * la classe ''path'', qui représente un chemin vers un fichier ou répertoire ;   * la classe ''path'', qui représente un chemin vers un fichier ou répertoire ;
   * la classe ''filesystem_error'' pour la gestion des erreurs ;   * la classe ''filesystem_error'' pour la gestion des erreurs ;
-  * l'énumération ''file_type'' pour lister les types (fichier, répertoire, lien, etc) ; +  * l'énumération ''file_type'' pour lister les types (fichier, répertoire, lien, etc.) ; 
-  * l'énumération ''copy_options'' pour lister les options possibles lors d'une copie (écraser les fichiers existants, parcourir les sous-répertoires, suivre les liens symboliques, et.) ; +  * l'énumération ''copy_options'' pour lister les options possibles lors d'une copie (écraser les fichiers existants, parcourir les sous-répertoires, suivre les liens symboliques, etc.) ; 
-  * l'énumération ''perms'' pour lister les permissions d'un fichier (propriétaire du fichier, groupe d'utilisateurs, etc) ;+  * l'énumération ''perms'' pour lister les permissions d'un fichier (propriétaire du fichier, groupe d'utilisateurs, etc.) ;
   * la classe ''file_status'' pour gérer le type de fichier et les permissions d'accès ;   * la classe ''file_status'' pour gérer le type de fichier et les permissions d'accès ;
   * la classe ''directory_entry'' représente une entrée dans un répertoire, avec un chemin et les statuts du fichier ;   * la classe ''directory_entry'' représente une entrée dans un répertoire, avec un chemin et les statuts du fichier ;
Ligne 23: Ligne 23:
 Pour terminer, le document définit l'ensemble des fonctions libres pour copier, renommer, déplacer ou supprimer des fichiers et répertoires, manipuler les chemins, tester le type et les accès des fichiers, créer des liens. Pour terminer, le document définit l'ensemble des fonctions libres pour copier, renommer, déplacer ou supprimer des fichiers et répertoires, manipuler les chemins, tester le type et les accès des fichiers, créer des liens.
  
-L'ensemble des fonctionnalités est accessible via l'en-tête <filesystem>.+L'ensemble des fonctionnalités est accessible via l'en-tête ''<filesystem>''.
  
 ===== La gestion des erreurs ===== ===== La gestion des erreurs =====
Ligne 42: Ligne 42:
 Il est donc conseillé en C++ d'utiliser des classes assurant le RAII : les pointeurs intelligents (''shared_ptr'', ''weak_ptr'', ''unique_ptr''), les conteneurs standards (''vector'', ''list'', ''map'', etc.) et plus généralement les outils de la STL (''string'', ''stream'', etc). Je vous conseille la lecture de l'article [[http://alexandre-laurent.developpez.com/cpp/retour-fonctions-ou-exceptions/|Retour de fonctions ou exceptions ?]] Il est donc conseillé en C++ d'utiliser des classes assurant le RAII : les pointeurs intelligents (''shared_ptr'', ''weak_ptr'', ''unique_ptr''), les conteneurs standards (''vector'', ''list'', ''map'', etc.) et plus généralement les outils de la STL (''string'', ''stream'', etc). Je vous conseille la lecture de l'article [[http://alexandre-laurent.developpez.com/cpp/retour-fonctions-ou-exceptions/|Retour de fonctions ou exceptions ?]]
  
-En complément, le C++11 introduit un nouveau mot-clé ''noexcept'' qui permet d'indiquer qu'une fonction ne retournera pas d'exception (c'est-à-dire qu'elle ne lance pas d'exception et qu'elle n'appelle que des fonctions ''noexcept'').+En complément, le C++11 introduit un nouveau mot-clé ''noexcept'' qui permet d'indiquer qu'une fonction ne retournera pas d'exception (c'est-à-dire ne lançant pas d'exception et n’appelant que des fonctions ''noexcept'').
  
-Les fonctions de //File System// existent en deux versions, l'une utilisant la gestion d'erreur par exception et l'autre par un code d'erreur. Pour garder les signatures des fonctions similaires, le code d'erreur est passé comme argument (référence non constante) et non en retour de fonction.+Les fonctions de //File System// existent en deux versions, l'une utilisant la gestion d'erreur par exception et l'autre par code d'erreur. Pour garder les signatures des fonctions similaires, le code d'erreur est passé comme argument (référence non constante) et non en retour de fonction.
  
 Ainsi, pour tester l’existence d'un fichier, la fonction ''exists'' existe selon les deux signatures suivantes : Ainsi, pour tester l’existence d'un fichier, la fonction ''exists'' existe selon les deux signatures suivantes :
Ligne 53: Ligne 53:
 </code> </code>
  
-La première version ne prend pas de code d'erreur en argument, la second oui (et est donc déclarée en ''noexcept''). Pour les utiliser :+La première version ne prend pas de code d'erreur en argument, la seconde oui (et est donc déclarée en ''noexcept''). Pour les utiliser :
  
 <code cpp> <code cpp>
Ligne 77: Ligne 77:
 ===== Les fonctions libres ===== ===== Les fonctions libres =====
  
-Beaucoup de fonction prennent en paramètre un objet de type ''path'' ou de type ''file_status''. Comme il existe un constructeur (non ''explicit'') de ''path'' prenant en paramètre une chaîne, il est possible d'appeler les fonctions directement avec une chaîne.+Beaucoup de fonctions prennent en paramètre un objet de type ''path'' ou de type ''file_status''. Comme il existe un constructeur (non ''explicit'') de ''path'' prenant en paramètre une chaîne, il est possible d'appeler les fonctions directement avec une chaîne.
  
 <code cpp> <code cpp>
Ligne 100: Ligne 100:
   * le chemin canonique est le chemin absolu sans lien symbolique ou élément ''.'' et ''..''   * le chemin canonique est le chemin absolu sans lien symbolique ou élément ''.'' et ''..''
  
-Les fonction ''absolute'' et ''canonical'' permettent d'obtenir les chemins absolu et canonique :+Les fonctions ''absolute'' et ''canonical'' permettent d'obtenir les chemins absolu et canonique :
  
 <code cpp> <code cpp>
Ligne 107: Ligne 107:
 auto path_absolute = absolute("my_file.cpp", "/home/me"); auto path_absolute = absolute("my_file.cpp", "/home/me");
  
-auto path_cononical = canonical(old_path);+auto path_canonical = canonical(old_path);
 auto path_canonical = canonical("my_file.cpp"); auto path_canonical = canonical("my_file.cpp");
 auto path_canonical = canonical("my_file.cpp", "/home/me"); auto path_canonical = canonical("my_file.cpp", "/home/me");
Ligne 148: Ligne 148:
 </code> </code>
  
-La fonction ''statuts'' peut émettre une exception ''filesystem_error'' si le type détecté est ''file_type::none''. Attention, les types ''file_type::not_found'' et ''file_type::unknown'' ne sont pas considérées comme des erreurs et ne lancent pas d'exception (cela est considéré comme étant normal dans le fonctionnement des systèmes de fichiers).+La fonction ''statuts'' peut émettre une exception ''filesystem_error'' si le type détecté est ''file_type::none''. Attention, les types ''file_type::not_found'' et ''file_type::unknown'' ne sont pas considérés comme des erreurs et ne lancent pas d'exception (cela est considéré comme étant normal dans le fonctionnement des systèmes de fichiers).
  
-Pour terminer, la fonction ''status_known'' permet de tester qu'un statut est connu (c'est-à-dire qu'il n'est pas de type ''file_type::none'').+Pour terminer, la fonction ''status_known'' permet de tester si un statut est connu (c'est-à-dire qu'il n'est pas de type ''file_type::none'').
  
 <code cpp> <code cpp>
Ligne 185: Ligne 185:
 cout << s.free << endl; // espace libre cout << s.free << endl; // espace libre
 cout << s.available << endl; // espace cout << s.available << endl; // espace
-    // disponible, en fonction des autorisation d'accès+    // disponible, en fonction des autorisations d'accès
 </code> </code>
  
Ligne 209: Ligne 209:
     * ''others_all'' (tout) ;     * ''others_all'' (tout) ;
   * ''all'' (toutes les permissions, pour tout le monde) ;   * ''all'' (toutes les permissions, pour tout le monde) ;
-  * Pour les identifiant+  * Pour les identifiants :
     * ''set_uid'' (user id) ;     * ''set_uid'' (user id) ;
     * ''set_gid'' (group id) ;     * ''set_gid'' (group id) ;
c_1y_file_system.1394744134.txt.gz · Dernière modification: 2014/03/13 21:55 par 188.141.132.194