Visual Studio — как удалить файл вложения после отправки почты при использовании EA Sendmail в C ++?

Я использую Visual Studio 2015 для создания простой программы отправки почты с использованием библиотеки EA Sendmail.
Я пытаюсь отправить «D: \ tmp \ pic.jpg», после успешной отправки я бы удалил его командой
remove("D:\\tmp\\pic.jpg") от #include<stdio.h>, Но этот файл все еще там? В чем моя ошибка?

1

Решение

Если это Windows, могут произойти три вещи:
1. Файл по-прежнему заблокирован из-за отложенной операции отправки почты.
2. Файл был заблокирован антивирусом, в то время как он может подключиться к действиям открытия файла, некоторые AV просто блокируют удаление файла / перемещение файла.
3. Разрешение вопроса. Вы используете нестандартную папку, в корневом каталоге диска .. это, скорее всего, унаследованное разрешение от корневого каталога. В вашем конкретном случае вы программируете runneth с недостаточными (невыполненными?) Привилегиями.
4. Путь UTF-16. Это реальный путь, который вы предлагаете?

Вы используете remove () из стандартной библиотеки? тот, который основан на слое «эмуляции» POSIX Windows API, в котором отсутствуют специфические для Windows функции. Вы не можете определить фактические причины и не можете манипулировать разрешениями ACL \ и поддерживает только Latin1 в пути. Windows поддерживает Unicode (UTF-16) в NTFS, но для его использования вам нужны функции вызова из «нативного» API, который принимает строки с широкими символами (DeleteFileW). Windows API позволяет получить больше состояний кода ошибки, чем POSIX. Также в Windows есть механизмы для отслеживания \ ожидания файла, если он открыт другой операцией, но тот, который доступен только для повышенных пользователей, к сожалению, это драйвер уровня ядра для taskmgr.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector