我有一个 SSIS 作业,它将输入文件从 FTP 服务器复制到本地服务器并进行大量处理。这些输入文件非常大,当外部供应商将它们推送到我们的 FTP 服务器时,大约需要 5 分钟才能接收到文件的全部内容。
当我的包复制文件时;我想确保不复制部分文件;即,当文件仍被推送到 FTP 服务器时,我不想复制文件。我想我可以通过在复制文件之前检查文件锁定来实现这一点,如果有任何锁定等待 10 分钟再试一次。谁能告诉我如何检查文件锁?
谢谢
我有一个 SSIS 作业,它将输入文件从 FTP 服务器复制到本地服务器并进行大量处理。这些输入文件非常大,当外部供应商将它们推送到我们的 FTP 服务器时,大约需要 5 分钟才能接收到文件的全部内容。
当我的包复制文件时;我想确保不复制部分文件;即,当文件仍被推送到 FTP 服务器时,我不想复制文件。我想我可以通过在复制文件之前检查文件锁定来实现这一点,如果有任何锁定等待 10 分钟再试一次。谁能告诉我如何检查文件锁?
谢谢
编辑
在下面的解决方案中,我正在检查本地文件锁。在所述情况下的解决方案是要求供应商在完整文件加载并准备好下载后在 FTP 服务器上发布一个小标志文件。在开始下载完整文件之前检查标志文件是否存在。
结束编辑
我在脚本任务中使用了以下内容来检查文件锁:
public void Main()
{
// TODO: Add your code here
string strTracePath = Dts.Variables["uv_TraceFilePath"].Value.ToString();
FileInfo fInfo = new FileInfo(strTracePath);
try
{
Dts.Variables["uv_TraceFileSize"].Value = fInfo.Length;
fInfo.MoveTo(strTracePath + "_old");
FileInfo fInfoOld = new FileInfo(strTracePath + "_old");
fInfoOld.MoveTo(strTracePath);
Dts.Variables["uv_ProcessTraceFile"].Value = true;
}
catch
{
Dts.Variables["uv_ProcessTraceFile"].Value = false;
}
Dts.TaskResult = (int)ScriptResults.Success;
}
该任务在重命名文件时尝试移动文件(到同一文件夹)。如果成功,则将其移回原始名称。成功时,它将变量设置为 true。失败时,它将变量设置为 false。完成这项任务后,我使用条件优先约束来决定下一步该做什么。为了完成这项工作,我Using System.IO;
在脚本顶部添加了一个声明。