2016-12-04 61 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的內核級驅動程序。

相關問題