Visual studio 根据文件名中提供的时间戳选择最新文件
我必须从文件夹(C:\Users)中按顺序选择文件(第一个文件优先),文件名中有时间戳。 例如,下面是我在C:\Users\中的文件,时间戳位于下面第一个文件中的第一个下划线之后,即20170126102806。我必须循环浏览文件并选择第一个文件,以此类推。因此,在下面的5个文件中,20170123-000011_20170126101823_AAA是第一个文件。如何在SSIS中执行此操作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
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左右,但有类似的代码可以工作。如果需要,只需将其熨平。要确认,您希望按特定顺序处理所有文件,对吗?您能按您要处理的顺序显示这些文件吗?