1

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

4

1 回答 1

0

如果是 Windows,可能会发生以下三种情况: 1. 文件仍因发送邮件的延迟操作而阻塞。2. 文件被杀毒软件阻止,虽然它可能会钩住ffile打开活动,但有些AV只是阻止文件删除\文件移动。3.权限问题。您在磁盘的根目录中使用非标准文件夹。它很可能从根目录继承了权限。在您的特定情况下,您的程序 runneth 没有足够的(未提升的?)特权。4. UTF-16 路径问题。你提供的真正途径是什么?

您正在使用标准库中的 remove() 吗?那个基于 Windows API 的 POSIX“仿真”层,缺乏特定于窗口的功能。你无法确定实际原因,也无法操作 ACL\permissions 并且仅支持路径中的 Latin1。Windows 在 NTFS 上支持 Unicode(UTF-16),但要使用它,您需要从接受宽字符字符串 (DeleteFileW) 的“本机”API 调用函数。Windows API 允许获得比 POSIX 更多的错误代码状态。如果文件被其他操作打开,Windows 也有机制来监视\等待文件是否存在,但遗憾的是,该机制仅适用于 Elevated 用户,这是 taskmgr 的内核级驱动程序。

于 2016-12-04T10:43:39.750 回答