es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo usar C# en “Script Task” para obtener archivos de la carpeta de entrada en orden por “Fecha de modificación”

Estoy utilizando SSIS para procesar archivos en la carpeta de entrada. He creado una “Tarea de script” utilizando C# para procesar los archivos, pero no funciona correctamente.

Tengo una carpeta de origen de entrada que contiene dos archivos de texto con marcas de tiempo diferentes de “Fecha de modificación”. Mi problema es que tengo que obtener el archivo más antiguo que llegó en las últimas 24 horas primero, y luego el siguiente. He escrito este código en C#, pero no está seleccionando el archivo en el orden correcto.

Por ejemplo, la carpeta de entrada contiene estos dos archivos de texto:

FlatFileA 19/12/2021 10:03
FlatFileB 19/12/2021 10:04

He escrito este código, pero no está seleccionando los archivos en el orden correcto. Quiero que obtenga primero “FlatFileA” y luego el siguiente. Aquí está mi código:

public void Main()
{
   string SourceDirectory = Dts.Variables[XPFL_InputDir].Value.ToString();
   string FileName = "";

   var files = new DirectoryInfo(SourceDirectory).GetFiles("*.txt");
   string OldestFile = "";

   foreach (FileInfo file in files)
   {
      if (file.LastWriteTime > DateTime.Now.AddHours(-24))
         {
            OldestFile = file.Name;
         }
   }

   FileName = Path.GetFileName(OldestFile);

   MessageBox.Show("El archivo más antiguo es: " + FileName);

}

El código anterior no está obteniendo los archivos en el orden correcto. ¿Podrías revisarlo y decirme qué debo hacer para solucionarlo?

Gracias nuevamente por toda tu ayuda.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema de no obtener los archivos en el orden correcto, puedes ordenar los archivos por su LastWriteTime antes de iterar sobre ellos. Aquí tienes el código modificado que debería hacer el trabajo:

    public void Main()
    {
        string SourceDirectory = Dts.Variables[XPFL_InputDir].Value.ToString();
        string FileName = "";
        var files = new DirectoryInfo(SourceDirectory).GetFiles("*.txt");
        string OldestFile = "";
    
        // Ordenar los archivos por LastWriteTime en orden ascendente
        Array.Sort(files, (f1, f2) => f1.LastWriteTime.CompareTo(f2.LastWriteTime));
    
        foreach (FileInfo file in files)
        {
            if (file.LastWriteTime > DateTime.Now.AddHours(-24))
            {
                OldestFile = file.Name;
                break; // Se encontró el archivo más antiguo dentro de las últimas 24 horas, no es necesario continuar iterando
            }
        }
    
        FileName = Path.GetFileName(OldestFile);
    
        MessageBox.Show("El archivo más antiguo es " + FileName);
    
    }
    

    Lo que hace este código es ordenar los archivos por su LastWriteTime en orden ascendente utilizando el método Array.Sort con una expresión lambda. Luego itera sobre los archivos ordenados y se detiene tan pronto como encuentra el archivo más antiguo dentro de las últimas 24 horas, que es lo que querías lograr.

Comments are closed.