我想从用户那里获取文件名,然后根据该名称,我将获得另一个输入。这是一个多输入多输出问题。 所以我将问题规范化如下。
1.我在控制流程中使用Script Tast并要求在C#中输入文件名称使用表格。我正在获取文件名作为浏览文件。
2.然后解压缩文件并根据我设置的3个变量的文件名检查文件的名称。
3.根据变量我采取了3个数据流任务。并且它适用于上述指定的问题。
4.Its可以处理不同的数据流任务。
但是当我使用平面文件源名称动态地使用时,我有另一个问题(使用表达式)它给了我关于无法打开文件的错误。
错误“[平面文件源[1]]错误:无法打开数据文件”C:\ Documents and Settings \ XQN4P \ Desktop \ Inputs \ Intraday \ OPTION_DAILY_INTRADAY_ASIA20140212.csv“。”
请注意,此文件是由用户解压缩输入的文件生成的。
还有警告“[平面文件源[1]]警告:进程无法访问该文件,因为它正由另一个进程使用。 “即可。
这是我用来解压缩它的代码。
}
private void unzipInFile(string inputFilePath, string destDirectory,string destFileName)
{
FileStream fsIn =new FileStream (inputFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
FileStream fsOut =new FileStream(destDirectory +"\\"+destFileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
int buffersize = 4096;
int count = 0;
var buffer= new byte [buffersize];
//using (Stream compressed = File.OpenRead(inputFilePath))
//using (ZlibStream zlib = new ZlibStream(compressed, CompressionMode.Decompress))
using(GZipStream gZip = new GZipStream(fsIn, Ionic.Zlib.CompressionMode.Decompress, Ionic.Zlib.CompressionLevel.BestCompression, true ))
{
byte[] buf = new byte[short.MaxValue];
int bufl;
while (0 != (bufl = gZip.Read(buf, 0, buf.Length)))
{
if (count != 0)
fsOut.Write(buffer, 0, count);
if (count != buffersize)
return ;
}
}
fsOut.Close();
}
另一个地址变量
Dts.Variables["FileAddress"].Value = filePath + ".csv";
SSIS结构: “ScriptTask”将输出发送到3个数据流任务。
答案 0 :(得分:0)
解决了问题。 问题在于解压缩文件的格式化。 它无法获得行分隔符。 有时文件仍在使用中。 所以我为此工作,没关系