elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  (Solucionado) [Ruby] Ayuda con rescue!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Solucionado) [Ruby] Ayuda con rescue!  (Leído 3,532 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
(Solucionado) [Ruby] Ayuda con rescue!
« en: 26 Febrero 2012, 18:43 pm »

Buenas

Tengo hecho un code, He leido sobre Rescue, Raise, Y retry, Pero no lo entiendo del todo...

El rescue solo se ejecuta una vez en mi code, Y yo necesito que haga rescues sin parar, Suponía que era con "retry" pero creo que no...

Lo único que necesito conseguir es que si al mover el archivo da error (El error EACCES) se intente mover una y otra vez, Hasta conseguirlo.

Porfavor una ayuda


Código
  1. # Proceso
  2.  
  3. def Mover()
  4.  
  5. for archivo in ARGV[1..ARGV.length].each
  6.  
  7. if File.exist?(ARGV[0] + "\\" + archivo.split('\\').last)
  8. response = message_box("Origen:\n" + archivo + "\n\n Destino:\n " + ARGV[0] + "\\" + archivo.split('\\').last + "\n\n El archivo de destino ya existe, Reemplazar archivo?", "Reemplazar archivo?", BUTTONS_YESNO)
  9. if response == CLICKED_YES
  10.   FileUtils.move archivo, ARGV[0]
  11.   elsif response == CLICKED_CANCEL
  12.   Process.exit
  13. end
  14. else
  15. FileUtils.move archivo, ARGV[0]
  16. end
  17. end
  18.  
  19. rescue Errno::EACCES
  20. puts "El archivo está en uso"
  21. FileUtils.move archivo, ARGV[0]
  22. retry
  23.  
  24. end
  25.  
  26.  
  27. Mover()
  28. Process.exit


« Última modificación: 1 Marzo 2012, 14:40 pm por EleKtro H@cker » En línea



Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [Ruby] Ayuda con rescue!
« Respuesta #1 en: 26 Febrero 2012, 22:22 pm »

Creo que entiendo el correcto funcionamiento de rescue, retry, y ensure, he modificado el code y el retry funciona, se crea un bucle infinito que pone "el archivo está en uso"... y cuando deja de estarlo, se mueve el archivo. Hasta ahí bien, pero ahora me surge otro problema al haberlo modificado...

Sale un dialogo de windows en el cual si clickas "No" o "Cancelar", el archivo no se mueve, Pero ahora siempre se mueve aunque yo clcike "NO"

Código
  1. # Proceso
  2. begin
  3.  
  4. def Mover()
  5. for archivo in ARGV[1..ARGV.length].each
  6. if File.exist?(ARGV[0] + "\\" + archivo.split('\\').last)
  7. response = message_box("Origen:\n" + archivo + "\n\n Destino:\n " + ARGV[0] + "\\" + archivo.split('\\').last + "\n\n El archivo de destino ya existe, Reemplazar archivo?", "Reemplazar archivo?", BUTTONS_YESNO)
  8. if response == CLICKED_YES
  9.   FileUtils.move archivo, ARGV[0]
  10.   elsif response == CLICKED_CANCEL
  11.   Process.exit
  12. end
  13. else
  14. FileUtils.move archivo, ARGV[0]
  15. end
  16. end
  17.  
  18. rescue Errno::EACCES
  19. puts "El archivo está en uso"
  20. retry
  21. ensure
  22. FileUtils.move archivo, ARGV[0]
  23. end
  24. end
  25.  
  26. Mover()
  27. Process.exit

El fallo supongo que está en el ENSURE, porque claro, se asegura de que el archivo se mueve (Yo pensaba que solo lo haría si da error) Aunque la respuesta sea "CLICKED_CANCEL" lo mueve, Pero entonces... como lo hago?


En línea



Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [Ruby] Ayuda con rescue!
« Respuesta #2 en: 1 Marzo 2012, 14:40 pm »

Ya lo he conseguido, he salido del "proceso" para llamar un método y así sí...

Aunque sigo teniendo un pequeño problema, mejor lo comento en otro post.

un saludo

Código
  1. # -*- coding: UTF-8 -*-
  2.  
  3. # Mueve archivos desde un punto de origen hasta un punto de destino
  4. # Pensado para usarlo como replazamiento del "SendTo" de Windows.
  5. #
  6. # (Requiere el uso de argumentos)
  7.  
  8.  
  9. # Módulos
  10.  
  11. require "FileUtils"
  12. require 'dl'
  13.  
  14. exit if Object.const_defined?(:Ocra)
  15.  
  16.  
  17. # Variables constantes
  18.  
  19. BUTTONS_OKCANCEL = 1
  20. BUTTONS_YESNO = 4
  21. CLICKED_CANCEL = 2
  22. CLICKED_YES = 6
  23. CLICKED_NO = 7
  24.  
  25.  
  26. # Métodos
  27.  
  28. def help()
  29. print "\nSe requiere al menos 1 archivo de origen.\n\n\n"
  30. print "Modo de empleo: \n\n"
  31. print ' Mover.rb [Destino] [Archivo de origen 1] [Archivo de origen 2] [etc...]' + "\n\n\n"
  32. print 'Ejemplo: (Mover tres archivos al directorio de destino "C:"' + "\n\n"
  33. print ' Mover.rb "C:\" "D:\Archivo1.txt" "E:\Archivo2.jpg" "F:\Archivo3.mp3"' + "\n\n"
  34. Process.exit
  35. end
  36.  
  37. def message_box(txt, title='', buttons='')
  38.    user32 = DL.dlopen('user32')
  39. msgbox = DL::CFunc.new(user32['MessageBoxA'], DL::TYPE_LONG, 'MessageBox')
  40. r, rs = msgbox.call([0, txt, title, 3].pack('L!ppL!').unpack('L!*'))
  41.    return r
  42. end
  43.  
  44. def force_move(source_file, dest_file)
  45.  FileUtils.mv $archivo, ARGV[0]
  46.  rescue Errno::EACCES
  47.   response = message_box("El archivo esta en uso:\n" + $archivo  + "\n\n Reintentar?", "Reintentar?", BUTTONS_OKCANCEL)
  48. if response == CLICKED_YES
  49.       retry
  50.   elsif response == CLICKED_CANCEL
  51.       Process.exit
  52.  end
  53. end
  54.  
  55.  
  56. # Control de errores
  57.  
  58. if ARGV.empty? == true
  59. help()
  60. elsif ARGV.length < 2
  61. help()
  62. elsif File.directory?(ARGV[0]) == false
  63. print "\n El directorio de destino no existe: " + (ARGV[0]) + "\n"
  64. Process.exit
  65. end
  66.  
  67. for archivo in ARGV[1..ARGV.length].each
  68. if File.exist?(archivo) == false
  69. print "\n El archivo a mover no existe: " + archivo + "\n"
  70. end
  71.  
  72. end
  73.  
  74.  
  75. # Proceso
  76.  
  77. for $archivo in ARGV[1..ARGV.length].each
  78.  
  79. if File.exist?(ARGV[0] + "\\" + $archivo.split('\\').last)
  80. response = message_box("Origen:\n" + $archivo + "\n\n Destino:\n " + ARGV[0] + "\\" + $archivo.split('\\').last + "\n\n El archivo de destino ya existe, Reemplazar archivo?", "Reemplazar archivo?", BUTTONS_YESNO)
  81. if response == CLICKED_YES
  82.   force_move($archivo, ARGV[0])
  83.   elsif response == CLICKED_CANCEL
  84.   Process.exit
  85. end
  86. else
  87. force_move($archivo, ARGV[0])
  88. end
  89.  
  90. end
  91.  
  92.  
  93. # Fin
  94. Process.exit
En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Grub rescue> [SOLUCIONADO]
GNU/Linux
:ohk<any> 8 40,166 Último mensaje 7 Enero 2015, 00:07 am
por Magluss
(Solucionado) [RUBY] Renombrando un caracter ilegal « 1 2 »
Scripting
Eleкtro 16 12,802 Último mensaje 21 Febrero 2012, 02:59 am
por Eleкtro
(Solucionado) [Ruby] Colorizando texto
Scripting
Eleкtro 1 3,156 Último mensaje 20 Febrero 2012, 10:15 am
por Eleкtro
(Solucionado) [Ruby] Exportar una variable a la shell del SO?
Scripting
Eleкtro 1 2,832 Último mensaje 3 Marzo 2012, 02:40 am
por Eleкtro
(Solucionado) [RUBY] Como filtrar un body html?
Scripting
Eleкtro 1 2,566 Último mensaje 19 Marzo 2012, 09:58 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines