simbolo mayusculas mapas herencias comparar clase cadenas arreglos ruby

mayusculas - require en ruby



¿Cómo creo un directorio si no existe ninguno usando la clase File en Ruby? (7)

¿Qué hay de usar Pathname ?

require ''pathname'' some_path = Pathname("somedir/some_subdir/some-file.html") some_path.dirname.mkdir_p some_path.write(builder.to_html)

Tengo esta declaración:

File.open(some_path, ''w+'') { |f| f.write(builder.to_html) }

Dónde

some_path = "somedir/some_subdir/some-file.html"

Lo que quiero que suceda es que si no hay un directorio llamado somedir o some_subdir o ambos en la ruta, quiero que lo cree automágicamente.

¿Cómo puedo hacer eso?


A lo largo de líneas similares (y dependiendo de su estructura), así es como resolvimos dónde almacenar capturas de pantalla:

En nuestra configuración env (env.rb)

screenshotfolder = "./screenshots/#{Time.new.strftime("%Y%m%d%H%M%S")}" unless File.directory?(screenshotfolder) FileUtils.mkdir_p(screenshotfolder) end Before do @screenshotfolder = screenshotfolder ... end

Y en nuestro hooks.rb

screenshotName = "#{@screenshotfolder}/failed-#{scenario_object.title.gsub(//s+/,"_")}-#{Time.new.strftime("%Y%m%d%H%M%S")}_screenshot.png"; @browser.take_screenshot(screenshotName) if scenario.failed? embed(screenshotName, "image/png", "SCREENSHOT") if scenario.failed?


La solución de la "biblioteca principal" de la respuesta superior estaba incompleta. Si solo desea utilizar bibliotecas principales, use lo siguiente:

target_dir = "" Dir.glob("/#{File.join("**", "path/to/parent_of_some_dir")}") do |folder| target_dir = "#{File.expand_path(folder)}/somedir/some_subdir/" end # Splits name into pieces tokens = target_dir.split(////) # Start at ''/'' new_dir = ''/'' # Iterate over array of directory names 1.upto(tokens.size - 1) do |n| # Builds directory path one folder at a time from top to bottom unless n == (tokens.size - 1) new_dir << "#{tokens[n].to_s}/" # All folders except innermost folder else new_dir << "#{tokens[n].to_s}" # Innermost folder end # Creates directory as long as it doesn''t already exist Dir.mkdir(new_dir) unless Dir.exist?(new_dir) end

Necesitaba esta solución porque la gema de dependencia de FileUtils rmagick impidió que mi aplicación Rails se implementara en Amazon Web Services, ya que rmagick depende del paquete libmagickwand-dev (Ubuntu) / imagemagick (OSX) para funcionar correctamente.


Para aquellos que buscan una manera de crear un directorio si no existe , aquí está la solución simple:

require ''fileutils'' FileUtils.mkdir_p ''dir_name''

Basado en el comment de Eureka.


Puede usar FileUtils para crear recursivamente directorios principales, si aún no están presentes:

require ''fileutils'' dirname = File.dirname(some_path) unless File.directory?(dirname) FileUtils.mkdir_p(dirname) end

Editar: Aquí hay una solución que usa solo las bibliotecas principales (se vuelve a implementar la rueda, no se recomienda)

dirname = File.dirname(some_path) tokens = dirname.split(/[////]/) # don''t forget the backslash for Windows! And to escape both "/" and "/" 1.upto(tokens.size) do |n| dir = tokens[0...n] Dir.mkdir(dir) unless Dir.exist?(dir) end


Según las respuestas de otros, no pasó nada (no funcionó). No hubo error y no se creó ningún directorio.

Esto es lo que necesitaba hacer:

require ''fileutils'' response = FileUtils.mkdir_p(''dir_name'')

Necesitaba crear una variable para captar la respuesta que FileUtils.mkdir_p(''dir_name'') envía de vuelta ... ¡entonces todo funcionó como un amuleto!


directory_name = "name" Dir.mkdir(directory_name) unless File.exists?(directory_name)