我有一个调用存储过程的程序,它工作正常。
结果,给了我 10 个不同项目名称的文件。
我想做的是能够压缩这 10 个文件并制作一个包含这些文件的单个 .ZIP,然后我可以删除所有 10 个原始 .CSV 文件。
我怎么能这样做?
这是我的代码:
List<string> projectName = new List<string>();
List<string> category = new List<string>();
List<string> Subcategory = new List<string>();
int count = xml.GetElementsByTagName("projectName").Count;
for (int i = 0; i < count; ++i)
{
projectName.Add(xml.GetElementsByTagName("projectName")[i].InnerText);
category.Add(xml.GetElementsByTagName("category")[i].InnerText);
Subcategory.Add(xml.GetElementsByTagName("Subcategory")[i].InnerText);
}
for (int i = 0; i < count; ++i)
{
string outCsvFile = string.Format(@"C:\\temp\\{0}.csv", category[i] + " " + Subcategory[i]);
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Connection = conn;
sqlCmd.CommandText = "testStoredProcedure";
sqlCmd.Parameters.AddWithValue("@ProjectTitle", projectName[i]);
sqlCmd.Parameters.AddWithValue("@Category", category[i]);
sqlCmd.Parameters.AddWithValue("@SubCategory", Subcategory[i]);
sqlCmd.Parameters.AddWithValue("@TaskType", "");
sqlCmd.Parameters.AddWithValue("@TaskStatus", "");
sqlCmd.Parameters.AddWithValue("@IsBaseLanguage", 1);
sqlCmd.Parameters.AddWithValue("@RaterDemographics", "FirtName,LastName,Email,Adress");
conn.Open();
SqlDataReader reader = sqlCmd.ExecuteReader();
using (StreamWriter file = new StreamWriter(outCsvFile))
{
List<string> items = new List<string>();
for (int j = 0; j <= 5; j++)
{
items.Add(reader.GetName(j));
}
file.WriteLine("\"" + string.Join("\",\"", items) + "\"");
while (reader.Read())
{
items = new List<string>();
for (int j = 0; j <= 5; j++)
{
items.Add(reader[j].ToString());
}
file.WriteLine("\"" + string.Join("\",\"", items) + "\"");
}
}
conn.Close();
}
压缩文件后,您可以添加一个循环来删除它们:
为了能够压缩,您可以使用 .net 中包含的类
如何:压缩和提取文件
有多少与班级
ZipFile
一起创建 zip现在的问题是如何在不阻止文件的情况下生成 zip,因为您肯定应该使用
using
. 这样,当您完成构建 zip 时退出使用它时,它会被释放以便能够删除文件C# 5.0 (.NET 4.5) 中的压缩文件
分析你的使用方式很重要
有一个我评论的用法,这样当你完成 zip 的组装时,文件就会被释放,这样你就可以删除它们