How to call a recursive function inside an Invoke code activity?

Hello guys, I wrote a function that copies the content from one file path to another using recursion

 static void Main(string[] args)
    {
        string RutaOrigen = @"C:\Users\MrRobot\Desktop\New Folder 1";
        string RutaDestino = @"C:\Users\MrRobot\Desktop\New Folder 2";

        CopiarFiles(RutaOrigen, RutaDestino);
    }

    public static void CopiarFiles(string carpetaOrigen, string carpetaDestino)
    {
        // check si carpeta de destino existe
        if (!Directory.Exists(carpetaDestino)) Directory.CreateDirectory(carpetaDestino);

        // obtiene files dentro de carpeta de origen
        string[] files = Directory.GetFiles(carpetaOrigen);

        // itera a través de cada file
        foreach (string file in files)
        {
            // obtiene nombre del file(sin la ruta)
            string name = Path.GetFileName(file);
            // obtiene nombre del file + la ruta de destino
            string dest = Path.Combine(carpetaDestino, name);

            // intenta copiar file, si file existe, salta la iteración
            try
            {
                File.Copy(file, dest);
            }
            catch
            {
                continue;
            }
            
        }

        // Obtener folders dentro de carpeta de origen
        string[] folders = Directory.GetDirectories(carpetaOrigen);

        // itera a través de cada folder
        foreach (string folder in folders)
        {
            // obtiene nombre del folder (sin la ruta)
            string name = Path.GetFileName(folder);
            // obtiene nombre del folder + la ruta de destino
            string dest = Path.Combine(carpetaDestino, name);

            // intenta copiar el folder y contenidos recursivamente, si folder existe, salta la iteración
            try
            {
                CopiarFiles(folder, dest);
            }
            catch
            {
                continue;
            }
            
        }

    }

I would like to know how could I implement this code inside an Invoke code activity. The reason I am using recursion and not e.g the CopyDirectory VB method is because I do not want to overwrite the files(and folders) that already might exist in the destination folder, i.e I am just copying the files (and folders) that do not exist yet in the destination folder. Thanks in advance

Hi @ahzaradsh ,

This is a rough guess, Invoke Code works similar to a main method, so you will need to write your script something like this

Things to consider:

  • I’m not sure if the script compiler is going to like your method to be static
  • The public access might not be strictly necessary
  • You could achieve the same results using built in activities, have you considered something as simple as setting “continue on error” to true or checking if the file exists before writing it (also built in)?
    void CopiarFiles(string carpetaOrigen, string carpetaDestino)
    {
        // check si carpeta de destino existe
        if (!Directory.Exists(carpetaDestino)) Directory.CreateDirectory(carpetaDestino);

        // obtiene files dentro de carpeta de origen
        string[] files = Directory.GetFiles(carpetaOrigen);

        // itera a través de cada file
        foreach (string file in files)
        {
            // obtiene nombre del file(sin la ruta)
            string name = Path.GetFileName(file);
            // obtiene nombre del file + la ruta de destino
            string dest = Path.Combine(carpetaDestino, name);

            // intenta copiar file, si file existe, salta la iteración
            try
            {
                File.Copy(file, dest);
            }
            catch
            {
                continue;
            }
            
        }

        // Obtener folders dentro de carpeta de origen
        string[] folders = Directory.GetDirectories(carpetaOrigen);

        // itera a través de cada folder
        foreach (string folder in folders)
        {
            // obtiene nombre del folder (sin la ruta)
            string name = Path.GetFileName(folder);
            // obtiene nombre del folder + la ruta de destino
            string dest = Path.Combine(carpetaDestino, name);

            // intenta copiar el folder y contenidos recursivamente, si folder existe, salta la iteración
            try
            {
                CopiarFiles(folder, dest);
            }
            catch
            {
                continue;
            }
            
        }

    }

string RutaOrigen = @"C:\Users\MrRobot\Desktop\New Folder 1";
string RutaDestino = @"C:\Users\MrRobot\Desktop\New Folder 2";

 CopiarFiles(RutaOrigen, RutaDestino);
  • ok, no static

  • ok, that makes sense since it is already inside a main method, it is not like i am calling the method from another function

  • Build acitvities like Copy File? In case you mean that, I could not copy a folder, or could I?

After reading your suggestion what I am doing right know is to put my Invoke method activity (with copydirectory) inside a try/catch block and set the overwrite value to false and it seems to work.