将电子邮件附件保存在硬盘上后,如何以编程方式删除它们[重复]

Posted

技术标签:

【中文标题】将电子邮件附件保存在硬盘上后,如何以编程方式删除它们[重复]【英文标题】:How can i programmatically delete email attachments after I save them on my hard drive [duplicate] 【发布时间】:2016-12-08 10:00:28 【问题描述】:

所以我正在制作一个 Outlook 插件,程序在其中读取电子邮件附件并将它们保存在 windows:(c) 目录中。但我希望程序在程序完成读取附件后从目录中删除电子邮件附件。

代码:

string path = @"C:\\att\\" + attachment.FileName;
attachment.SaveAsFIle(Path);

【问题讨论】:

所以基本上你想在删除文件之前等待处理特定文件类型的任何程序关闭? 【参考方案1】:

不确定您的程序结构是什么样的,但您可以:a) 跟踪您在应用程序实例中创建的所有附件文件或 b) 扫描附件目录以获取所需的附件列表删除。

然后有了这些信息,您就可以遍历您的列表并使用 System.IO.File 类的 Delete 函数删除文件:

foreach(var path in listOfAttachments)

   System.IO.File.Delete(path);

【讨论】:

是的,您提供的代码有效。但它确实有问题。它不会删除 pdf 文件。程序引发“System.IO.IOEXception”异常,并且 PMP.pdf 已在其他程序中运行。 这是因为您的目标文件(本例中为 PMP.pdf)由于被其他程序或用户打开而被锁定。显然,如果文件正在使用中,您将无法删除它。您需要确定这是由于您的测试环境造成的,还是生产中可能出现的情况。如果是,那么我会跳过该文件(尝试捕获您的 Delete 调用)并继续遍历列表。【参考方案2】:

删除文件: System.IO.File.Delete(path)

https://msdn.microsoft.com/en-us/library/system.io.file.delete(v=vs.110).aspx

你可以遍历文件夹内的文件

https://msdn.microsoft.com/en-us/library/07wt70x2(v=vs.110).aspx

string [] fileEntries = Directory.GetFiles(targetDirectory);
foreach(string fileName in fileEntries)

        System.IO.File.Delete(fileName);

【讨论】:

以上是关于将电子邮件附件保存在硬盘上后,如何以编程方式删除它们[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果附件本身是邮件,如何在 Outlook 中以编程方式访问附件数据

如何以编程方式强制 log4net 释放日志文件以便可以访问它?

附件未以编程方式发送到邮件中

在 iOS 7 上以编程方式安装 .mobileconfig 文件

Lotus Notes电子邮件作为另一封电子邮件的附件

从多部分/替代消息中获取附件作为字符串[重复]