DeleteFileTransactedW 関数 (winbase.h)

[Microsoft では、開発者がアプリケーションのニーズを達成するために代替手段を利用することを強くお勧めします。 TxF が開発された多くのシナリオは、より簡単で簡単に利用できる手法を使用して実現できます。 さらに、将来のバージョンの Microsoft Windows では TxF を使用できない場合があります。 詳細と TxF の代替手段については、「 トランザクション NTFS を使用する代替手段」を参照してください。

トランザクション操作として、既存のファイルを削除します。

構文

BOOL DeleteFileTransactedW(
  [in] LPCWSTR lpFileName,
  [in] HANDLE  hTransaction
);

パラメーター

[in] lpFileName

削除するファイルの名前。

ファイルはローカル コンピューターに存在する必要があります。それ以外の場合、関数は失敗し、最後のエラー コードは ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE に設定されます。

既定では、名前はMAX_PATH文字に制限されています。 この制限を 32,767 文字のワイド文字に拡張するには、パスの先頭に "\\?\" を付加します。 詳細については、「ファイル、パス、および名前空間の名前付け」を参照してください。

ヒント

Windows 10 バージョン 1607 以降では、"\\?\" を前に置かずに、MAX_PATHの制限を削除するようにオプトインできます。 詳細については、「 ファイル、パス、および名前空間の名前付け 」の「最大パス長の制限」セクションを参照してください。

[in] hTransaction

トランザクションのハンドル。 このハンドルは、 CreateTransaction 関数によって返されます。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合、戻り値は 0 (ゼロ) になります。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

存在しないファイルをアプリケーションが削除しようとすると、DeleteFileTransacted 関数はERROR_FILE_NOT_FOUNDで失敗します。 ファイルが読み取り専用ファイルの場合、関数は ERROR_ACCESS_DENIED で失敗します。

次の一覧では、ファイルの削除、削除、または終了に関するいくつかのヒントを示します。

  • 読み取り専用ファイルを削除するには、まず読み取り専用属性を削除する必要があります。
  • ファイルを削除または名前変更するには、ファイルに対する削除アクセス許可を持っているか、親ディレクトリの子アクセス許可を削除する必要があります。
  • ディレクトリ内のファイルを再帰的に削除するには、 SHFileOperation 関数を使用します。
  • 空のディレクトリを削除するには、 RemoveDirectoryTransacted 関数を 使用します。
  • 開いているファイルを閉じるには、 CloseHandle 関数を使用します。
削除と削除の子を除くすべてのアクセス権を持つディレクトリを設定し、新しいファイルのアクセス制御リスト (ACL) を継承する場合は、削除できないファイルを作成できます。 ただし、ファイルを作成し、ファイルの作成時に返されるハンドルに対して要求したすべてのアクセス権を取得できます。

ファイルの作成時に削除アクセス許可を要求した場合は、そのハンドルを使用してファイルを削除または名前変更できますが、他のハンドルでは削除できません。 詳細については、「 ファイル のセキュリティとアクセス権」を参照してください。

DeleteFileTransacted 関数は、アプリケーションが通常の I/O 用に開いている他のハンドルがあるファイルを削除しようとした場合、またはメモリ マップト ファイルとして削除しようとすると失敗します (他のハンドルが開かれたときにFILE_SHARE_DELETEが指定されている必要があります)。

DeleteFileTransacted 関数は、閉じるとファイルに削除のマークを付けます。 トランザクションがまだアクティブな場合、ファイルに対する最後のトランザクション ライター ハンドルが閉じられた後に、ファイルが削除されます。 ファイルが削除対象としてマークされていて、トランザクションの完了後もトランザクション ライター ハンドルが開いている場合、ファイルは削除されません。

シンボリック リンク: パスがシンボリック リンクを指している場合、シンボリック リンクは削除され、ターゲットは削除されません。 ターゲットを削除するには、 CreateFile を 呼び出し、 FILE_FLAG_DELETE_ON_CLOSEを指定する必要があります。

Windows 8とWindows Server 2012では、この関数は次のテクノロジでサポートされています。

テクノロジ サポートされています
サーバー メッセージ ブロック (SMB) 3.0 プロトコル いいえ
SMB 3.0 Transparent Failover (TFO) いいえ
SMB 3.0 とスケールアウト ファイル共有 (SO) いいえ
クラスター共有ボリューム ファイル システム (CsvFS) いいえ
Resilient File System (ReFS) いいえ
 

SMB 3.0 は TxF をサポートしていません。

注意

winbase.h ヘッダーは、DeleteFileTransacted をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winbase.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

CloseHandle

CreateFileTransacted

ファイル管理機能

シンボリック リンク

トランザクション NTFS