如何在C++中使用EA Sendmail发送邮件后删除附件文件?
问题描述:
我使用Visual Studio 2015使用EA Sendmail库创建简单的发送邮件程序。 我尝试发送“D:\ tmp \ pic.jpg”,发送成功后我会通过命令 remove("D:\\tmp\\pic.jpg")
从#include<stdio.h>
删除它。但是这个文件还在吗?我的错误是什么?如何在C++中使用EA Sendmail发送邮件后删除附件文件?
答
如果这是Windows,则可能发生三件事: 1.文件仍被发送邮件的延迟操作阻塞。 2.文件被防病毒拦截,虽然它可能挂钩ffile打开活动,但一些AV只是阻止文件删除\文件移动。 3.权限问题。你正在使用非标准的文件夹,在磁盘的根目录中,最有可能的是从根目录继承权限。在你的具体情况下,你编程运行不足(未升级?)priveleges。 4. UTF-16路径问题。你提供的是真正的道路吗?
您正在使用标准库中的remove()吗?那一个基于Windows API的POSIX“模拟”层,缺乏特定于Windows的功能..您无法确定实际原因,无法操作ACL \权限并仅支持路径中的Latin1。 Windows支持NTFS上的Unicode(UTF-16),但要使用它,您需要从接受widechar字符串的“本机”API调用函数(DeleteFileW)。 Windows API允许获得比POSIX更多的错误代码状态。另外,Windows有机制来监视\等待文件,如果它是由其他操作打开的,但是只有高级用户可用,不幸的是,这是taskmgr的内核级驱动程序。
你检查了['remove()'](http://en.cppreference.com/w/cpp/io/c/remove)的返回码吗? –
@πάνταῥεῖ,它返回-1? –
所以出了点问题?可能该文件仍在使用中,只要发送邮件尚未完成。 –