none
Manipular archivos entre 3 rutas diferentes RRS feed

  • Pregunta

  • Buen día.

    Como podría mover archivos de una ruta entrada a una ruta salida o una ruta error.
    Es decir, el programa que realizo lee un archivo de texto, y genera un documento, y lo que busco es si el archivo fue procesado correctamente se mueva de Ruta Entrada a Ruta Procesados, pero si el archivo genero alguna excepción o error, lo mueva a una Ruta Error.
    Hasta ahora solo he podido mover los archivos a la Ruta Procesados, si tienen o no error estos se van a esa ruta, anexo el código que manejo:

    private static void EventoIntervalo(Object source, System.Timers.ElapsedEventArgs et)
        {
            conexionbd conexionbd = new conexionbd();
            string sCon = conexionbd.CadenaConexion();
            SqlConnection con = new SqlConnection(sCon);
    
            try
            {
                con.Open();
                string sel = "select RutaEntrada, RutaSalida, RutaError from Rutas_Datos";
                SqlCommand command = new SqlCommand(sel, con);
                SqlDataReader reader = command.ExecuteReader();
    
                while (reader.Read())
                {
                    string startFolder = reader["RutaEntrada"].ToString();
                    string exitFolder = reader["RutaSalida"].ToString();
                    string errorFolder = reader["RutaError"].ToString();
                   
                    // Toma una instantánea del sistema de archivos.  
                    System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);
                    System.IO.DirectoryInfo dirEx = new System.IO.DirectoryInfo(exitFolder);
                    System.IO.DirectoryInfo dirError = new System.IO.DirectoryInfo(errorFolder);
    
                    //Este método asume que la aplicación tiene permisos de descubrimiento
                    //para todas las carpetas de la ruta especificada. 
                    IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
    
                    //Crea la consulta  
                    IEnumerable<System.IO.FileInfo> fileQuery =
                        from file in fileList
                        where file.Extension == ".txt"
                        select file;
    
                    Conectar();
    
                    //Ejecuta la consulta. ¡Esto podría abrir muchos archivos!  
                    foreach (System.IO.FileInfo fi in fileQuery)
                    {
                        if (dir.Exists)
                        {
                            AbreEmpresasql(startFolder + '\\' + fi.Name);
                            LeerArchvioTXT(startFolder + '\\' + fi.Name);
                            ValidarEstructura(startFolder + '\\' + fi.Name);
                            //CrearClientes(startFolder + '\\' + fi.Name);
                            Producto(startFolder + '\\' + fi.Name);
                            Cliente(startFolder + '\\' + fi.Name);
                            CreaDoctoSQL(startFolder + '\\' + fi.Name);
                        }
    
                        string sourceFile = System.IO.Path.Combine(startFolder, fi.Name);
                        string destFile = System.IO.Path.Combine(exitFolder, fi.Name);
                        string errorFile = System.IO.Path.Combine(errorFolder, fi.Name);
    
                        try
                        {
                            if (!File.Exists(sourceFile))
                            {
                                using (FileStream fs = File.Create(sourceFile)) ;
                                { }
                            }
    
                            if (File.Exists(destFile))
                            {
                                File.Delete(destFile);
                            }
    
                            File.Move(sourceFile, destFile);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("Fallo el proces: {0}", e.ToString());
                        }
                    }
                    //Cierra SDK
                    SDK.fTerminaSDK();
                    System.Console.ReadKey();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }


    miércoles, 21 de abril de 2021 20:03

Todas las respuestas

  • Hola Geovani,

    Gracias por levantar tu consulta en los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    miércoles, 21 de abril de 2021 22:55
    Moderador
  • Hola Geovani

    Si podes mover archivos hacia una ruta, entonces podes moverlos a cualquier ruta. No vi con demasiado detalle el código, pero si tuviera que adivinar, quizás lo que queres hacer para mover a la carpeta error, es hacerlo dentro del bloque catch que es donde se informa que se produjo el error? 

    Si no se soluciona tu problema, podes explicarme un poco mejor e intentaré ayudarte.

    Saludos

    Pablo

    sábado, 29 de mayo de 2021 21:02