Visual Studio 2015 を使用して、EA Sendmail ライブラリを使用して簡単なメール送信プログラムを作成しています。「D:\tmp\pic.jpg」を送信しようとしましたが、送信に成功したら、
remove("D:\\tmp\\pic.jpg")
からのコマンドで削除し#include<stdio.h>
ます。しかし、このファイルはまだそこにありますか? 私の間違いは何ですか?
1 に答える
Windows の場合、次の 3 つのことが発生する可能性があります。 1. メール送信操作の遅延により、ファイルがまだブロックされている。2. ファイルはウイルス対策によってブロックされましたが、ファイルを開くアクティビティにフックする可能性がありますが、一部の AV はファイルの削除やファイルの移動をブロックするだけです。3. 権限の問題。ディスクのルート ディレクトリにある非標準のフォルダを使用しています。ルート ディレクトリから権限を継承した可能性があります。あなたの特定のケースでは、不十分な(昇格されていない?)権限で runneth をプログラムします。4. UTF-16 パスの問題。あなたが提供するその本当の道はありますか?
標準ライブラリの remove() を使用していますか? Window固有の機能が欠けているWindows APIのPOSIX「エミュレーション」レイヤーに基づくもの..実際の理由を特定できず、ACL\パーミッションを操作できず、パスでLatin1のみをサポートします。Windows は NTFS で Unicode(UTF-16) をサポートしていますが、それを使用するには、ワイド文字列 (DeleteFileW) を受け入れる「ネイティブ」API から関数を呼び出す必要があります。Windows API では、POSIX よりも多くのエラー コード状態を取得できます。また、Windowsには、ファイルが他の操作によって開かれている場合にファイルを監視\待機するメカニズムがありますが、残念ながら、昇格したユーザーのみが利用できるメカニズムは、taskmgrのカーネルレベルのドライバーです。