Foros del Web » Programación para mayores de 30 ;) » .NET »

Duda excepción TRY CATCH

Estas en el tema de Duda excepción TRY CATCH en el foro de .NET en Foros del Web. Hola a todos, Tengo el siguiente código para un pequeño programa que busca (a partir de un directorio introducido por pantalla), todos los subdirectorios que ...
  #1 (permalink)  
Antiguo 31/08/2010, 05:40
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 13 años, 7 meses
Puntos: 0
Duda excepción TRY CATCH

Hola a todos,

Tengo el siguiente código para un pequeño programa que busca (a partir de un directorio introducido por pantalla), todos los subdirectorios que contenga el tipo de archivo .mul y los mueve a la ruta que tú también le hayas indicado por pantalla. El código es el siguiente:


Module Module1
Dim dir As String
Dim origen1() As String
Dim origentemp As String


Sub Main()
Dim ruta_origen As String
Dim ruta_destino As String
Dim i As Integer

Console.WriteLine("Introduzca ruta del directorio del que se desea hacer la búsqueda (.mul):")
Console.Write("# ")
ruta_origen = Console.ReadLine()
Console.WriteLine("Introduzca ruta del directorio que se creará para copiar los datos:")
Console.Write("# ")
ruta_destino = Console.ReadLine()



For Each foundFile As String In My.Computer.FileSystem.GetFiles(ruta_origen, FileIO.SearchOption.SearchAllSubDirectories, "*.mul")
' Console.WriteLine(foundFile)

i = 0
origentemp = ""
origen1 = foundFile.Split("\")


Do While (Right(origen1(i), 4) = ".mul") = False

If i = 0 Then
origentemp = CStr(origen1(i))
Else
origentemp = (origentemp + "\" + CStr(origen1(i)))
End If

System.Threading.Thread.CurrentThread.Sleep(150)
i = i + 1



Loop

Next


Try
My.Computer.FileSystem.MoveDirectory(origentemp, ruta_destino + "\" + origen1(i - 1), True)
Catch ex As System.IO.DirectoryNotFoundException
Console.Write(origentemp)
Console.WriteLine(" Excepción recogida")


End Try
Console.WriteLine("Copia satisfactoria de directorio/s anteriores!")
Console.ReadKey()
End Sub

End Module


**Y mi problema es el siguiente: Resulta que hay directorios en los que se encuentran mucha cantidad de archivos .mul (unos 200 o así), por tanto me gustaría tener una excepción que una vez que el subdirectorio vea que hay un .mul, ya copie el directorio entero (incluyendo todo lo que tenga dentro) y salte a copiar el siguiente. He probado varias cosas y con el try catch donde debería estar pero no lo consigo. Y evidentemente donde lo tengo ahora (tras el MoveDirectory), una vez que copia un directoria sale del programa.

Alguien puede exarmen una mano????
Muchas gracias
  #2 (permalink)  
Antiguo 01/09/2010, 10:18
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Duda excepción TRY CATCH

Try Catch controlan excepciones (Errores), cual sería el error que quieres controlar?
  #3 (permalink)  
Antiguo 01/09/2010, 10:38
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Duda excepción TRY CATCH

Hola claudiovega, lo primero gracias por tu respuesta.

Quiero que una vez que encuentre un .mul dentro de un directorio (ya que a veces hay muchos) copie el directorio y se olvide de él para pasar al siguiente. Ya que si hay varios .mul en un mismo directorio, el programa encuentra uno y mueve el directorio ok?? pero luego al encontrar los siguientes .mul de ese directorio da error, ya que vuelve a encontrar otro e intentar volver a mover el diretorio, cosa que no puede hacer ya que éste ahora no existe, pues se ha movido antes.

¿Puede hacerse con try catch de manera que en el momento que encuentre el segundo .mul, el movedirectory ya dará error, y pasar al siguiente? no lo consigo

Muchas gracias.
  #4 (permalink)  
Antiguo 01/09/2010, 11:01
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Duda excepción TRY CATCH

Puedes colocar un flag, que compare el directorio antes copiado con el que tienes que copiar ahora y si son iguales no copiar.
  #5 (permalink)  
Antiguo 01/09/2010, 12:02
 
Fecha de Ingreso: agosto-2010
Mensajes: 3
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Duda excepción TRY CATCH

Nunca van a ser iguales los directorios, porq en cuanto encuentra el primer archivo .mul MUEVE el directorio, no lo copia, y este desaparece, por tanto podemos tener al principio el directorio (la ruta) en una variable y luego cuando encuentre otro .mul ya no hay ruta en la otra variable, estará vacía, y ahí da el error porq ha encontrado un .mul y no puede mover el directorio (pues ya fue movido antes y no hay nada). ¿¿???
Gracias
  #6 (permalink)  
Antiguo 01/09/2010, 12:08
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Duda excepción TRY CATCH

Actualizas la variable.

anterior="c:\xxxx"

for

actual=archivo.directorio
if actual == anterior
' no hago nada
else
' muevo

anterior=actual

next
  #7 (permalink)  
Antiguo 12/09/2010, 13:18
 
Fecha de Ingreso: marzo-2007
Mensajes: 74
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: Duda excepción TRY CATCH

Solo le hice unos ajustes a tu programa a si quedaria a mi me funciono
Solo te faltaria validar cuando el mismo nombre de archivo mul se encuentre en varios directorios para ver cual es el mas actualizado o que remplaze el anterior o que no haga nada
no especificaste por eso no lo puse


Saludos
fer.

Module Module1
Dim dir As String
Dim origen1() As String
Dim origentemp As String

Private Sub Mueve(ByVal Fuente As String, ByVal destino As String)
Try
My.Computer.FileSystem.MoveFile(Fuente, destino)
Catch ex As Exception
Console.WriteLine(Err.Description)
Console.WriteLine("--------------------------------------------------------------")

End Try
End Sub

Private Function Archivo_Nuevo(ByVal S As String) As String
Dim M1 As String
Dim I As Integer
Dim Found As Boolean
M1 = ""

Found = False
I = Len(S)
While I > 1 And Not Found
If Mid(S, I, 1) = "\" Then
Found = True
Else
M1 = Mid(S, I, 1) & M1
End If
I = I - 1
End While
Archivo_Nuevo = M1
End Function


Sub Main()
Dim ruta_origen As String
Dim ruta_destino As String
Dim ArchivoOriginal As String
Dim ArchivoACopiar As String
Dim ArchivoDestino As String
Console.WriteLine("Introduzca ruta del directorio del que se desea hacer la búsqueda (*.mul):")
Console.Write("# ")
ruta_origen = Console.ReadLine()
Console.WriteLine("Introduzca ruta del directorio que se creará para copiar los datos:")
Console.Write("# ")
ruta_destino = Console.ReadLine()
If Mid(ruta_destino, Len(ruta_destino), 1) = "\" Then
ArchivoACopiar = ruta_destino
Else
ArchivoACopiar = ruta_destino & "\"
End If
For Each foundFile As String In My.Computer.FileSystem.GetFiles(ruta_origen, FileIO.SearchOption.SearchAllSubDirectories, "*.mul")
ArchivoOriginal = foundFile.ToString
ArchivoDestino = Archivo_Nuevo(ArchivoOriginal)
Console.WriteLine("[" & ArchivoDestino & "]")
If Trim(ArchivoDestino) <> "" Then
Console.WriteLine("Moviento a [" & ArchivoACopiar & "] el archivo [" & ArchivoOriginal & "]")
Mueve(ArchivoOriginal, ArchivoACopiar & ArchivoDestino)
Else
' en teoria nunca entra aqui
Console.WriteLine("no se movio [" & ArchivoOriginal & "]")
End If
Next
Console.WriteLine("termine ")
Console.ReadKey()
End Sub

Etiquetas: catch
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:27.