Paris on Rails 2008

Ouverture de session

Commentaires récents

Syndication
Flux XML

Dir.entries(path).length

Dir.entries(path).length
Posté par hoksitan le Mercredi, 31 Janvier, 2007 - 4:53am. Débuter avec Rails

Bonjour,

Quelqu'un saurait-il pourquoi "Dir.entries(path).length" ne me retourne pas 0 quand le path est un dossier vide ?


if Dir.entries(path).length != 0
=> rentre ds le if

if Dir.entries(path).length == 0
=> ne rentre pas ds le if

Et je vous assure que le dossier "path" est bien vide de fichiers !

Sinon, comment afficher sa valeur dans le modèle pr débuguer ?
Merci



[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | sujet précédent | sujet suivant | envoyer par email ]

Options d'affichage des commentaires
Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder" pour activer vos changements.

Sujet: 
Dir.entries : pas vide
Auteur: 
sam
Date: 
Mer, 31/01/2007 - 09:26

Bonjour,

C'est une problématique Ruby. Dans ce cas le mieux est d'utiliser irb en ligne de commande pour voir. Au moindre doute, pour tester une méthode que l'on ne maîtrise pas, irb c'est magique. Ci-dessous un exemple avec un répertoire 'toto' (c'est original) que j'ai créé et laissé vide :

irb(main):001:0> Dir.entries('toto')
=> [".", ".."]
irb(main):002:0> Dir.entries('toto').length
=> 2

Je pense que ça répond à la question ;-)

Sam.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Dir.entries
Auteur: 
reven
Date: 
Dim, 11/02/2007 - 13:39

J'ai justement eu le même problème hier soir,
ce qui est etonnant, c'est que :

Dir.glob(path)each do |f|.....

renvoit bien seulement les fichiers présents dans le répertoire

c'est plus long par contre ;-)

yohann


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
glob!
Auteur: 
jasperiel
Date: 
Dim, 11/02/2007 - 17:35

Glob, tu m'étonnes que ça soit plus long :
il appelle un fnmatch derrière !

Le mieux serait de supprimer les deux premières entrées, via :
files = Dir.entries(foobar) - '.' - '..'


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Je me doutais qu'il y avait
Auteur: 
hoksitan
Date: 
Mer, 31/01/2007 - 11:41

Je me doutais qu'il y avait un problème de ce genre ("." et "..").
J'ai aussi vérifié avec irb. Si je comprends bien, IRB est le meilleur ami du débugueur ?

Voilà mon code de suppression de dossiers (avec ou sans fichiers dedans).


def before_destroy
if self.url_title
path = "#{RAILS_ROOT}/#{DOCUMENTS_ROOT}/#{self.url_title}"
if File.directory?(path) and File.exists?(path)
if Dir.entries(path).length < 3
Dir.delete(path)
else
Dir.foreach(path) do |file|
FileUtils.rm_rf(path + '/' + file) if file != "." or file != ".."
end
end
end
end
end

Merci à tous les deux.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
IRB est ton ami
Auteur: 
sam
Date: 
Mer, 31/01/2007 - 17:48

Un très bon ami même !

irb tout seul, te permet de bricoler tranquillement avec Ruby. Quand veut tester un truc basé sur des map, select, ... avec des hash et des tableaux à n'en plus finir, tu prends irb. Tu as ta réponse de suite, sans avoir à tester avec tout RoR.

Après tu as la même chose pour RoR : la console. Là encore tu peux gagner pas mal de temps à tester / debugger en allant à l'essentiel. Pour plus d'info voir ici une approche simple et rapide :

http://slash7.com/articles/2006/12/21/secrets-of-the-rails-console-ninjas

La console est longue à démarrer sous windows (utilise reload! au maximum pour gagner du temps). Pour tester une bricole avec Ruby mieux veut prendre irb.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Merci sam. Je ne connaissais
Auteur: 
hoksitan
Date: 
Mer, 31/01/2007 - 18:47

Merci sam.

Je ne connaissais pas la console non plus !
(je suis sous OS X)


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
workaround
Auteur: 
greut
Date: 
Mer, 31/01/2007 - 10:12

Un moyen simple de nettoyer est de passer par un filtre.

> Dir.entries('.').delete_if {|x| x=='.' or x=='..'}.length
=> 0

S'il y a plus élégant, je prends.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Elimine toutes les entrées cachées
Auteur: 
Lanfeust21
Date: 
Mer, 31/01/2007 - 12:21

Dir.entries('.').grep(/^[^\.]/)


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Un peu plus simple :
Auteur: 
Bivi
Date: 
Mer, 31/01/2007 - 12:20

Un peu plus simple :

(Dir.entries('.')-['.','..']).length

et cela ne pose aucun problème si '.' ou '..' ne figurent pas initialement dans la liste.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Nouveaux liens

Sondage
Lorsque je développe avec Ruby on Rails c'est principalement sous:
Linux
37%
Mac OS X
30%
Windows
32%
(Free|Open|Net) BSD
1%
Autre...
1%
Nombre de votes: 374

Qui est en ligne
Il y a actuellement 1 utilisateur et 55 invités en ligne.

railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
[ Hébergement et ressources techniques gracieusement fournis par la SSLL Nuxos Group ]