Aujourd’hui on s’attaque aux fichiers. On a déjà vu comment importer des fichiers avec load ou require. Ici, on va voir d’autres utilités.
File
La classe utilisée est tout simplement nommée File. J’ai un fichier “test.rb” où je mets mon code, et dans le même dossier j’ai un fichier monfichier.txt avec du Lorem Ipsum. Voici une liste des méthodes que l’on peut utiliser :
File.directory?("monfichier.txt") # vérifie si le dossier existe, ici false File.file?("monfichier.txt") # vérifie si le fichier existe, ici true File.exists?("monfichier.txt") # idem File.size?("monfichier.txt") # donne la taille du fichier en bytes, ici 469 File.extname("monfichier.txt") # renvoie l'extension, ici txt File.extname("monfichiersansextension") # renvoie un String vide File.executable?("monfichier.txt") # vérifie si l'utilisateur peut exécuter le fichier, pas si le fichier est exécutable en soi File.readable?("monfichier.txt") # vérifie si le fichier est lisible, ici true File.writable?("monfichier.txt") # vérifie si le fichier est éditable, ici true File.owned?("monfichier.txt") # vérifie si l'utilisateur a les droits sur le fichier
Pour les utilisateurs d’OS Unix, il y a d’autres méthodes disponibles :
File.grpowned?("monfichier.txt") # vérifie si le groupe de l'utilisateur a les droits sur le fichier File.setgid?("monfichier.txt") File.setuid?("monfichier.txt")
Etant sous Windows, ces méthodes renvoient toutes false pour moi, et j’avoue ne pas comprendre les deux dernières.
Demain, on va lire un fichier (pour l’utiliser dans notre code!).
Flux RSS
Est-ce qu’il y a des différences entre les méthodes file?() et exists?().
Setgid et setuid sont des attributs de droits particuliers sous les systèmes Unix.
Ils permettent de modifier l’utilisateur (ou le groupe principal) lors de l’exécution d’un fichier.
Wikipedia donne des informations un peu plus complètes: http://fr.wikipedia.org/wiki/Setuid
La différence entre file et exists est très simple :
- file vérifie si c’est l’élément existe ET si c’est un fichier
- exists vérifie si l’élément existe (mais ça peut être un fichier ou un dossier, peu importe)
Merci pour les infos sur le setuid.
Ok, d’après ce que j’ai lu dans la documentation, Ruby implémente les différents types de fichiers Unix (socket, pipe, …). file?() permet de déterminer si c’est un fichier “normal”.
Il existe d’autres méthodes pour les autres types de fichiers, mais c’est vraiment spécifique aux machines Unix.
C’est un peu hors sujet, mais j’en profite pour remettre une couche sur les permissions sous Unix, j’ai trouvé un article beaucoup plus complet: http://fr.wikipedia.org/wiki/Permissions_Unix