Lorsque j'imprime tous les fichiers dans le répertoire Windows 7 system32 à l'aide de ruby, certains fichiers sont manquants. J'utilise cette simple itération de répertoire:Ruby Dir.foreach dans System32 manque fichiers/File.exists? renvoie false pour les fichiers existants
Dir.foreach("C:\\Windows\\System32") do |fname|
puts fname
end
Je cherche spécifiquement pour python27.dll, qui n'est pas imprimé, mais il existe. Le fichier existe? semble avoir le même problème que l'itération dir. elle retourne false pour un fichier existant:
File.exists? "C:\\Windows\\System32\\python27.dll" #returns false
Vérification d'un autre fichier existant du dossier fonctionne:
File.exists? "C:\\Windows\\System32\\quartz.dll" #returns true
Mais cela ne fonctionne pas si je dupliquer un fichier existant ou en créer un nouveau en system32
File.exists? "C:\\Windows\\System32\\quartz2.dll" #returns false
En outre, la copie python27.dll dans un autre répertoire et de vérifier l'existence fonctionne:
File.exists? "C:\\Otherfolder\\python27.dll" #returns true
Le problème n'a rien à voir avec la casse ou le délimiteur de chemin. J'ai vérifié ça. En outre, je ne vois pas de différences dans les droits d'utilisateur pour les fichiers qui fonctionnent et qui ne le font pas ...
Je n'ai vraiment aucune idée, pourquoi cela arrive ... quelqu'un peut-il reproduire cela ???
grâce
[modifier]
pris un certain temps, mais je trouve la réponse.
Il s'agissait d'un problème 32/64 bits. pour ruby en tant qu'application 32 bits, "C: \ Windows \ System32" est en fait "C: \ Windows \ SysWOW64". Comme le WinExplorer 64 bits l'a montré, python27.dll était dans System32 (que seuls les processus 64bit voient - bien, confus), alors qu'il aurait dû être dans SysWOW64 pour voir ruby. L'installation de la version 32 bits de Python a résolu le problème pour moi (comme je ne pouvais pas changer le script ruby, car il faisait partie de rubypython).
Je ne pense pas que c'est le problème, mais je préfère utiliser '/'à la place \ ou masqué \\, même quand je travaille avec Windows. '/' fonctionne bien et avec \ j'ai des problèmes. Il y a aussi 'File :: SEPARATOR' et vous pouvez construire des chemins avec' File.join'. – knut