基于修改日期的复制文件作为昨天的日期SSIS

时间:2018-10-04 11:23:12

标签: sql-server ssis-2012

我正在尝试基于getdate()-1将文件从一个文件夹复制到另一个文件夹

例如:Folder1

1) Order112.xml Date Modified 04/10/2018
2) Order113.xml Date Modified 03/10/2018
3) Order012.xml Date Modified 03/10/2018 

在使用数据流任务处理它们之前,我想将这些文件复制到另一个位置。前仅复制2nd and 3rd file。如何通过foreachLoop container中的表达式或脚本任务来实现这一点

我尝试使用用户变量移动所有.xml文件。我对文件名不怎么在意,只修改了日期

enter image description here

任何在Foreach循环中添加表达式或通过脚本任务实现表达式的想法。

Ps:文件名中没有日期。我还应该能够将变量更改为ex:getdate()-2

1 个答案:

答案 0 :(得分:2)

要基于上次修改文件的日期来复制文件,您将需要使用脚本任务来复制这些文件。 FileInfo类具有LastWriteTime属性,可用于检查文件的上次修改日期。下面的C#示例使用保存源文件夹和目标文件夹名称的SSIS变量以及从当前日期算起的天数的另一个SSIS变量对此进行了说明。我假设您只对修改文件的日期感兴趣,而不是对时间感兴趣,因此LastWriteTime和日期(当前日期减去给定的天数)仅在日期中格式。

DirectoryInfo sourceFolder = new DirectoryInfo(Dts.Variables["User::SourceFolder"].Value.ToString());

string destFileName;
string sourceFileName;

int daysBehind = Convert.ToInt32(Dts.Variables["User::DaysFromToday"].Value);
string destFolder = Dts.Variables["User::DestinationFolder"].Value.ToString();

var allFiles = sourceFolder.EnumerateFiles("*.*", System.IO.SearchOption.AllDirectories).Where(path
    //make sure to use the Date property to omit times from the comparison
        => path.LastWriteTime.Date == DateTime.Today.Date.AddDays(daysBehind)).ToList();
   foreach (FileInfo fi in sourceFolder.GetFiles())
    {

    sourceFileName = System.IO.Path.GetFileName(fi.ToString());
    destFileName = System.IO.Path.Combine(destFolder, sourceFileName);
    System.IO.File.Copy(fi.FullName, destFileName, true);

   }