227 votes

Comment faire un chemin de jointure sûr en ruby ?

Mon environnement de développement Rails est basé sur Windows, et mon environnement de production est basé sur Linux.

Il est possible que le VirtualHost soit utilisé. Supposons qu'un nom de fichier doive être référencé dans le fichier /public dossier avec File.open('/tmp/abc.txt', 'r') .

-mais sous Windows, ce devrait être C:\tmp\abc.txt . Comment puis-je faire une jointure de chemin correcte pour gérer les deux environnements différents ?

prefix_tmp_path = '/tmp/'
filename = "/#{rand(10)}.txt"

fullname = prefix_tmp_path + filename # /tmp//1.txt <- but I don't want a double //

Et quand prefix_tmp_path = "C:\tmp\" Je reçois C:\tmp\/1.txt

Quelle est la bonne façon de traiter les deux cas ?

389voto

csexton Points 8089

Je recommande d'utiliser File.join

>> File.join("path", "to", "join")
=> "path/to/join"

57voto

Daniel Von Fange Points 2739

Une chose à noter. Ruby utilise un "/" pour le séparateur de fichiers sur toutes les plateformes, y compris Windows, donc vous n'avez pas besoin d'utiliser un code différent pour joindre les choses ensemble sur les différentes plateformes. "C:/tmp/1.text" devrait fonctionner correctement.

Fichier.joint() est votre ami pour joindre les chemins ensemble.

prefix_tmp_path = 'C:/tmp'
filename = "#{rand(10)}.txt"
fullname = File.join(prefix_tmp_path, filename) # e.g., C:/tmp/3.txt

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X