我正在尝试基于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文件。我对文件名不怎么在意,只修改了日期
任何在Foreach循环中添加表达式或通过脚本任务实现表达式的想法。
Ps:文件名中没有日期。我还应该能够将变量更改为ex:getdate()-2
答案 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);
}