用于基于通配符搜索的文件重命名的C#脚本任务

时间:2018-09-10 21:23:39

标签: c# ssis

我试图创建一个C#脚本任务来重命名我每天收到的一对文件,这些文件的末尾附加了16位时间戳。像这样的文件“ Cartons_2018091014000000”

我在C#方面的经验还很低,所以请原谅我在逻辑结构上的尝试。

这是我一直认为可行的方法,但遇到了一些非常非描述性的错误。

        public void Main()
    {
        String txtfile = null;
        String[] fileEntries = Directory.GetFiles(@"\\test-file-server-name\Scripts\", "Cartons_*");

            foreach (string filename in fileEntries)
        {
            if(filename.Contains("Cartons"))
            {
                txtfile = filename;
                System.IO.File.Move(txtfile, "Cartons.csv");
            }
        }    
        // TODO: Add your code here

        Dts.TaskResult = (int)ScriptResults.Success;
    }

有什么想法或建议吗?还是在SSIS中执行此操作的更好/更优雅的方法?我当时以为我会使用ForLoop容器,但我认为它不起作用的原因是由于附加了时间戳,文件名每小时都会更改。

2 个答案:

答案 0 :(得分:0)

我很可能会猜测您在处理第二个文件时会遇到File already exists异常,因为您都将它们重命名为相同的名称。

我建议您在代码中放置一个断点,然后重新运行该程序包。这将使您逐步确认它。

如果这是问题所在,那么您只需要为唯一的文件选择新名称即可。

FWIW,您应该能够使用内置的文件系统任务来实现相同的功能(移动和重命名文件),而不是自己编写脚本。这是一个教程。 http://www.rafael-salas.com/2007/03/ssis-file-system-task-move-and-rename.html

答案 1 :(得分:0)

看起来像您拥有它,但可能是将文件保存在exe文件的运行时路径中。 (您只需要添加完整路径)

using System.IO;

class Program
{  
    static public void Main()
    {
        string Path = @"\\test-file-server-name\Scripts\";
        string[] fileEntries = Directory.GetFiles(Path, "Cartons_*");

        foreach (string filename in fileEntries)
        {
            if (filename.Contains("Cartons"))
            {
                File.Move(filename, Path + "Cartons.csv");
            }
        }
        // TODO: Add your code here

        //Dts.TaskResult = (int)ScriptResults.Success;
    }
}