我正在使用 asp.net 3.5 和 c# 在 SharePoint 2010 中创建自定义计时器作业服务。在此服务中,业务逻辑是我必须创建包含应用程序列表的 zip 文件作为每个客户端的 excel 报告。为此,我使用 Ionic .zip 第三方 dll 和 ZipFile 类,用于创建 zip 文件并将此 zip 文件存储在具有某些路径的硬盘上。这里的情况是我的代码包含两个 foreach 循环,上部用于客户端列表,内部用于应用程序列表。每个客户端可能没有。应用程序。我将这些应用程序添加到 zip 文件中,将其存储在硬盘上并将此文件附加到邮件中以发送给客户端,但我的问题是我试图在转到下一个客户端之前删除 zip 文件,因此应该不是硬盘上的任何文件,但我收到错误为“
foreach(list of clients)////may have no. of clients
{
string zipFileDownloadPath = String.Empty;
foreach(list of applications)//may have no. of applications
{
HttpWebResponse resp = (HttpWebResponse)httpReq.GetResponse();
Stream excelReport = resp.GetResponseStream();
zipFile.AddEntry(appName, excelReport);
}
zipFileDownloadPath = clientFolder + @"\" + client["client_name"] + "_" + reportDate + ".zip";
zipFile.Save(zipFileDownloadPath);
mail.Attachments.Add(new Attachment(zipFileDownloadPath));
smtp.Send(mail);//mail have body, subject etc.
//here I am deleting files
if (Directory.Exists(clientFolder))
{
Directory.Delete(clientFolder, true);//here I am getting error
}
}
在上面的代码中,我也尝试过将 zipfile 保存到输出流,这样就不需要在硬盘上存储文件并将此流附加到邮件附件,但问题是,我在输出流中得到了正确的字节但是发送邮件时,附件中的再见为零。//这是将输出流附加到邮件的代码
foreach(list of clients)////may have no. of clients
{
foreach(list of applications)//may have no. of applications
{
HttpWebResponse resp = (HttpWebResponse)httpReq.GetResponse();
Stream excelReport = resp.GetResponseStream();
zipFile.AddEntry(appName, excelReport);
}
Stream outputStream = new MemoryStream();
zipFile.Save(outputStream);
mail.Attachments.Add(new Attachment(outputStream,"ZipFileName" MediaTypeNames.Application.Zip);));
smtp.Send(mail);//mail have body, subject etc.
}