SSIS - 仅在没有锁定时复制文件

时间:2012-09-19 04:22:10

标签: ssis file-copying

我有一个SSIS作业,它将输入文件从FTP服务器复制到本地服务器并进行大量处理。这些输入文件的大小非常大,当外部供应商将它们推送到我们的FTP服务器时,它需要大约5分钟来接收文件的全部内容。

当我的包复制文件时;我想确保我不复制部分文件;当我们仍被推送到FTP服务器时,我不想复制这些文件。我想我可以通过在复制文件之前检查文件锁来实现这一点,如果有任何锁等待10分钟并再试一次。任何人都可以让我知道如何检查文件锁?

由于

1 个答案:

答案 0 :(得分:0)

修改

在下面的解决方案中,我正在检查本地文件锁。在所述情况下的解决方案是要求供应商在加载完整文件并准备下载之后在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;声明。