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