2016-12-04 50 views
1

我使用Visual Studio 2015使用EA Sendmail库创建简单的发送邮件程序。 我尝试发送“D:\ tmp \ pic.jpg”,发送成功后我会通过命令 remove("D:\\tmp\\pic.jpg")#include<stdio.h>删除它。但是这个文件还在吗?我的错误是什么?如何在C++中使用EA Sendmail发送邮件后删除附件文件?

+0

你检查了['remove()'](http://en.cppreference.com/w/cpp/io/c/remove)的返回码吗? –

+0

@πάνταῥεῖ,它返回-1? –

+0

所以出了点问题?可能该文件仍在使用中,只要发送邮件尚未完成。 –

回答

0

如果这是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的内核级驱动程序。

相关问题