Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 根据文件名中提供的时间戳选择最新文件_Visual Studio_Ssis - Fatal编程技术网

Visual studio 根据文件名中提供的时间戳选择最新文件

Visual studio 根据文件名中提供的时间戳选择最新文件,visual-studio,ssis,Visual Studio,Ssis,我必须从文件夹(C:\Users)中按顺序选择文件(第一个文件优先),文件名中有时间戳。 例如,下面是我在C:\Users\中的文件,时间戳位于下面第一个文件中的第一个下划线之后,即20170126102806。我必须循环浏览文件并选择第一个文件,以此类推。因此,在下面的5个文件中,20170123-000011_20170126101823_AAA是第一个文件。如何在SSIS中执行此操作 1.20170123-000011_20170126102806_AAA 2.20170123-00001

我必须从文件夹(C:\Users)中按顺序选择文件(第一个文件优先),文件名中有时间戳。 例如,下面是我在C:\Users\中的文件,时间戳位于下面第一个文件中的第一个下划线之后,即20170126102806。我必须循环浏览文件并选择第一个文件,以此类推。因此,在下面的5个文件中,20170123-000011_20170126101823_AAA是第一个文件。如何在SSIS中执行此操作

1.20170123-000011_20170126102806_AAA
2.20170123-000011_20170126103251_AAA
3.20170123-000011_20170126101823_AAA
4.20170123-000011_20170126103305_AAA
5.20170123-000011_20170126102641_AAA

您可以采取两种方式:

  • 使用foreach循环容器获取文件列表,然后填充数据库表。
    然后,在foreach循环之外,使用executesql以适当的顺序从该表中进行选择
    加载带有结果集的对象变量。然后使用第二个foreach循环逐步遍历变量对象并收集文件
  • 使用脚本任务检索文件夹的内容(文件列表)并对文件进行排序,然后使用数据集加载对象变量。然后使用foreach循环逐步遍历变量对象以收集文件

我希望这有帮助。

您可以在For-Each循环中使用脚本任务。每次使用返回的文件名作为加载源

使用System.IO

public void Main()
{
string filePath = "D:\\Temp";
DirectoryInfo dir = new DirectoryInfo(filePath);
var files = dir.GetFiles("*_AAA");//Or from a variable
DateTime fileCreateDate1 = File.GetCreationTime(filePath + "\\" + files[0]);
        if (files.Length >= 2)
        {
            for (int i = 1; i < files.Length; i++)
            {
                DateTime fileCreateDate2 = File.GetCreationTime(filePath+ "\\" + files[i]);

                if (fileCreateDate1 < fileCreateDate2)
                {
                    fileCreateDate1 = fileCreateDate2; 
                }
            }   
        }

        Dts.Variables["User::FileToLoad"].Value = fileCreateDate1;
        Dts.TaskResult = (int)ScriptResults.Success;
    }
public void Main()
{
字符串filePath=“D:\\Temp”;
DirectoryInfo dir=新的DirectoryInfo(filePath);
var files=dir.GetFiles(“*_AAA”);//或来自变量
DateTime fileCreateDate1=File.GetCreationTime(文件路径+“\\”+文件[0]);
如果(files.Length>=2)
{
for(int i=1;i
您必须在加载文件后将其删除,否则每次都会加载,因为它是最旧或最新的文件。
可能有一个bug左右,但有类似的代码可以工作。如果需要,只需将其熨平。

要确认,您希望按特定顺序处理所有文件,对吗?您能按您要处理的顺序显示这些文件吗?