如何使用SSIS 2008压缩文件夹而不使用任何第三方s / w?

时间:2016-07-14 15:28:58

标签: c# vb.net ssis-2008

我有一个场景,我想压缩我的文件夹,因为它们使用SSIS 2008存在大量文件。考虑它就像我有一个源文件夹和一个目标文件夹,同时从“SRC”移动文件到“TGT”文件夹必须在destination.Iow可行的选项,我认为这是SSIS脚本任务,因为我不能使用执行过程任务由于限制使用任何第三方软件,如7z / Winrar等。但我是即使在使用SSIS脚本组件之后也无法实现这一点。尝试了许多在线解决方案,但它没有用。如何使用SSIS 2008实现这样的功能?

2 个答案:

答案 0 :(得分:0)

我做了这个练习,我创建了一个脚本任务,通过使用Windows提供的压缩来执行文件夹的压缩; 文件夹名称可以动态更改。 这样就没有必要使用像7z / Winrar等第三方软件了。

您需要向脚本任务提供要压缩的文件夹和压缩文件夹的名称,如ReadOnlyVariables (将在选项卡ReadOnlyVariables中添加)

这两个变量必须在包的变量选项卡(字符串类型)中定义,并且可以通过循环动态更改(例如,每个变量)

我使用这两个变量:

sFolderCompressed - the folder '.zip' that you want to obtain eg. \\XX.XX.XX.XX\C$\.....\folderCompressed
sFolderSource - the source folder containing the files affected eg. \\XX.XX.XX.XX\C$\.....\folderSource

(*)

enter image description here

脚本使用c#制作,选择“脚本语言:Microsoft Visual C#2008”

enter image description here

这是要在Main方法中添加的代码:

public void Main()
{
    // TODO: Add your code here

    try
    {
        // variables used in process
        string l_sFolderCompressed = (string)Dts.Variables["User::sFolderCompressed"].Value;
        string l_sFolderSource = (string)Dts.Variables["User::sFolderSource"].Value;
        string l_sCommand = "zip -j " + l_sFolderCompressed + " " + l_sFolderSource + "/*";
        // create the ProcessStartInfo using "cmd" as the program to be run,
        // and "/C " as the parameters.
        // Incidentally, /C tells cmd that we want it to execute the command that follows,
        // and then exit.
        System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", "/C " + l_sCommand);     
        // The following commands are needed to redirect the standard output.
        // This means that it will be redirected to the Process.StandardOutput StreamReader.
        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.UseShellExecute = false;
        // Do not create the black window.
        procStartInfo.CreateNoWindow = true;
        // Now we create a process, assign its ProcessStartInfo and start it
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo = procStartInfo;
        proc.Start();
        // Get the output into a string
        string result = proc.StandardOutput.ReadToEnd();
        // Possibly display the command output.
    }
    catch (Exception objException)
    {
        Dts.TaskResult = (int)ScriptResults.Failure;
        // Log the exception
    }
    Dts.TaskResult = (int)ScriptResults.Success;
}

您还可以管理单个文件

"cmd", "/C zip -j c:\\...\file.zip c:\\..\file.txt");

我希望可以提供帮助

答案 1 :(得分:0)

如果您的目标是.Net 3及更高版本,则可以使用ZipPackage类。这里有完整的例子:

https://msdn.microsoft.com/en-us/library/system.io.packaging.zippackage.aspx

还有一个ZipArchive类,例如:

https://msdn.microsoft.com/en-us/library/system.io.compression.ziparchive(v=vs.110).aspx