2016-12-04 13 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の場合、次の3つのことが起こる可能性があります。 1.メールは送信操作の遅延によってブロックされます。 2.ファイルはウイルス対策によってブロックされましたが、ffileオープン活動でフックすることができますが、一部のAVではファイルの削除やファイルの移動をブロックしません。 3.権限の問題。あなたは、おそらく、ルートディレクトリからの継承された許可をディスクのルートディレクトリにある非標準フォルダを使用しています。あなたの特定のケースでは、プログラムは不十分な(不平等な)特典で実行されます。 4. UTF-16パスの問題。あなたが提供する本当の道は?

標準ライブラリからremove()を使用していますか?それはWindows固有の機能が欠けているWindows APIのPOSIX "エミュレーション"レイヤーに基づいています。実際の理由を判別することはできず、ACL \ permissionsを操作することはできません。 WindowsはNTFS上でUnicode(UTF-16)をサポートしていますが、それを使用するにはワイド文字列(DeleteFileW)を受け入れる "ネイティブ" APIからの呼び出し関数が必要です。 Windows APIでは、POSIXよりも多くのエラーコード状態を取得できます。また、Windowsは、他の操作で開いているファイルを監視するためのメカニズムを持っていますが、悲しいことに、それはtaskmgrのカーネルレベルのドライバです。

関連する問題