我有一个SSIS 包zip.dtsx。此包在 serverA 上成功运行。我在serverB中复制了这个包。但是,当我尝试在 serverB 上运行 zip.dtsx 时,它失败了。
zip.dtsx 只是读取源文件夹中的文件,对其进行压缩,将压缩文件保存到不同的文件夹,然后删除源文件夹中的原始文件。
经过一番调查,我发现如果我注释掉 C# 脚本任务中删除源文件夹中文件的部分。包运行成功。
我需要删除源文件夹中的文件。否则,这个文件只会被重复加载到数据库中。我已经按照这里的建议重新添加了脚本任务引用,但我仍然无法file.delete
成功运行。
public void Main()
{
String sourcePath = Convert.ToString(Dts.Variables["SourcePath"].Value);
String namePart = Convert.ToString(Dts.Variables["NamePart"].Value);
String destinationPath = Convert.ToString(Dts.Variables["DestinationPath"].Value);
FileStream sourceFile = File.OpenRead(@sourcePath + namePart);
FileStream destFile = File.Create(@destinationPath + namePart);
GZipStream compStream = new GZipStream(destFile, CompressionMode.Compress);
try
{
int theByte = sourceFile.ReadByte();
while (theByte != -1)
{
compStream.WriteByte((byte)theByte);
theByte = sourceFile.ReadByte();
}
}
finally
{
compStream.Dispose();
sourceFile.Close();
destFile.Close();
File.Delete(@sourcePath + namePart);
}
Dts.TaskResult = (int)ScriptResults.Success;
}
更新:
在此处尝试完全相同的代码后。并发现此代码删除了我在源文件夹中的文件,我尝试更新我的代码以遵循链接中删除文件的方式。但是,它仍然没有工作。下面是我如何更新我的代码。
String sourcePath = Convert.ToString(Dts.Variables["SourcePath"].Value);
String namePart = Convert.ToString(Dts.Variables["NamePart"].Value);
String destinationPath = Convert.ToString(Dts.Variables["DestinationPath"].Value);
FileStream sourceFile = File.OpenRead(@sourcePath + namePart);
FileStream destFile = File.Create(@destinationPath + namePart);
GZipStream compStream = new GZipStream(destFile, CompressionMode.Compress);
try
{
int theByte = sourceFile.ReadByte();
while (theByte != -1)
{
compStream.WriteByte((byte)theByte);
theByte = sourceFile.ReadByte();
}
}
finally
{
compStream.Dispose();
sourceFile.Close();
destFile.Close();
FileInfo currFileInfo = new FileInfo(@sourcePath + namePart);
currFileInfo.Delete();