Поделиться через


Функция DeleteFileTransactedA (winbase.h)

[Корпорация Майкрософт настоятельно рекомендует разработчикам использовать альтернативные средства для достижения потребностей вашего приложения. Многие сценарии, для которые TxF был разработан, можно достичь с помощью более простых и более доступных методов. Кроме того, TxF может быть недоступна в будущих версиях Microsoft Windows. Дополнительные сведения и альтернативные варианты TxF см. в разделе Альтернативные варианты использования транзакционных NTFS.]

Удаляет существующий файл как транзакцию.

Синтаксис

BOOL DeleteFileTransactedA(
  [in] LPCSTR lpFileName,
  [in] HANDLE hTransaction
);

Параметры

[in] lpFileName

Имя файла, который нужно удалить.

По умолчанию имя ограничено MAX_PATH символами. Чтобы расширить это ограничение до 32 767 расширенных символов, добавьте "\\?\" в путь. Дополнительные сведения см. в именовании файлов, путей и пространств имен.

Кончик

Начиная с Windows 10 версии 1607, вы можете отказаться от ограничения MAX_PATH без предустановки "\\?\". Дополнительные сведения см. в разделе "Ограничение максимальной длины пути" файлы именования, пути и пространства имен.

Файл должен находиться на локальном компьютере; в противном случае функция завершается ошибкой, а для последнего кода ошибки задано значение ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE.

[in] hTransaction

Дескриптор транзакции. Этот дескриптор возвращается функцией CreateTransaction.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение ненулевое.

Если функция завершается ошибкой, возвращаемое значение равно 0 (ноль). Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.

Замечания

Если приложение пытается удалить файл, который не существует, функция DeleteFileTransacted завершается ошибкой с ERROR_FILE_NOT_FOUND. Если файл является файлом только для чтения, функция завершается ошибкой ERROR_ACCESS_DENIED.

В следующем списке указаны некоторые советы по удалению, удалению или закрытию файлов:

  • Чтобы удалить файл только для чтения, сначала необходимо удалить атрибут только для чтения.
  • Чтобы удалить или переименовать файл, необходимо либо удалить разрешение на удаление файла, либо удалить дочернее разрешение в родительском каталоге.
  • Чтобы рекурсивно удалить файлы в каталоге, используйте функцию SHFileOperation.
  • Чтобы удалить пустой каталог, используйте функцию RemoveDirectoryTransacted.
  • Чтобы закрыть открытый файл, используйте функцию CloseHandle.
Если вы наследуете каталог со всеми доступами, кроме удаления и удаления дочернего элемента, а списки управления доступом (ACL) новых файлов наследуются, то вы можете создать файл без возможности его удаления. Однако затем вы можете создать файл, а затем получить весь доступ, который вы запрашиваете на дескриптор, который возвращается вам во время создания файла.

Если вы запрашиваете разрешение на удаление во время создания файла, вы можете удалить или переименовать файл с этим дескриптором, но не с другими дескрипторами. Дополнительные сведения см. в права доступа и безопасности файлов.

Функция DeleteFileTransacted завершается ошибкой, если приложение пытается удалить файл с другими дескрипторами, открытыми для обычного ввода-вывода или в виде сопоставленного с памятью файла (FILE_SHARE_DELETE должны быть указаны при открытии других дескрипторов).

Функция DeleteFileTransacted помечает файл для удаления при закрытии. Файл удаляется после закрытия последнего дескриптора записи транзакций в файл, если транзакция по-прежнему активна. Если файл помечен для удаления и дескриптор записи транзакций по-прежнему открыт после завершения транзакции, файл не будет удален.

символьные ссылки: Если путь указывает на символьную ссылку, то символьная ссылка удаляется, а не целевой объект. Чтобы удалить целевой объект, необходимо вызвать CreateFile и указать FILE_FLAG_DELETE_ON_CLOSE.

В Windows 8 и Windows Server 2012 эта функция поддерживается следующими технологиями.

Технологии Поддержанный
Протокол SMB 3.0 Нет
Отработка отказа SMB 3.0 (TFO) Нет
SMB 3.0 с масштабируемыми общими папками (SO) Нет
Файловая система общего тома кластера (CSVFS) Нет
Отказоустойчивая файловая система (ReFS) Нет
 

SMB 3.0 не поддерживает TxF.

Заметка

Заголовок winbase.h определяет DeleteFileTransacted как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows Vista [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2008 [только классические приложения]
целевая платформа Виндоус
заголовка winbase.h (включая Windows.h)
библиотеки Kernel32.lib
DLL Kernel32.dll

См. также

CloseHandle

CreateFileTransacted

функции управления файлами

символьные ссылки

транзакционных NTFS