次の方法で共有


CopyFileTransactedA 関数 (winbase.h)

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

トランザクション操作として既存のファイルを新しいファイルにコピーし、コールバック関数を介してその進行状況をアプリケーションに通知します。

構文

BOOL CopyFileTransactedA(
  [in]           LPCSTR             lpExistingFileName,
  [in]           LPCSTR             lpNewFileName,
  [in, optional] LPPROGRESS_ROUTINE lpProgressRoutine,
  [in, optional] LPVOID             lpData,
  [in, optional] LPBOOL             pbCancel,
  [in]           DWORD              dwCopyFlags,
  [in]           HANDLE             hTransaction
);

パラメーター

[in] lpExistingFileName

既存のファイルの名前。

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

先端

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

lpExistingFileName 存在しない場合、CopyFileTransacted 関数は失敗し、GetLastError 関数は ERROR_FILE_NOT_FOUNDを返します。

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

[in] lpNewFileName

新しいファイルの名前。

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

先端

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

[in, optional] lpProgressRoutine

ファイルの別の部分がコピーされるたびに呼び出される LPPROGRESS_ROUTINE 型のコールバック関数のアドレス。 このパラメーターは NULLできます。 進行状況コールバック関数の詳細については、CopyProgressRoutine 関数を参照してください。

[in, optional] lpData

コールバック関数に渡される引数。 このパラメーターは NULLできます。

[in, optional] pbCancel

このフラグがコピー操作中に TRUE に設定されている場合、操作は取り消されます。 それ以外の場合、コピー操作は引き続き完了します。

[in] dwCopyFlags

ファイルのコピー方法を指定するフラグ。 このパラメーターには、次の値の組み合わせを指定できます。

価値 意味
COPY_FILE_COPY_SYMLINK
0x00000800
ソース・ファイルがシンボリック・リンクの場合、宛先ファイルは、ソース・シンボリック・リンクが指しているのと同じファイルを指すシンボリック・リンクでもあります。
COPY_FILE_FAIL_IF_EXISTS
0x00000001
ターゲット ファイルが既に存在する場合、コピー操作はすぐに失敗します。
COPY_FILE_OPEN_SOURCE_FOR_WRITE
0x00000004
ファイルがコピーされ、元のファイルが書き込みアクセス用に開かれます。
COPY_FILE_RESTARTABLE
0x00000002
コピーが失敗した場合、コピーの進行状況はターゲット ファイルで追跡されます。 失敗したコピーは、後で lpExistingFileName に同じ値を指定し、失敗した呼び出しで使用されるものと同じ値を lpNewFileName することで再開できます。 これにより、コピー操作中に新しいファイルが複数回フラッシュされる可能性があるため、コピー操作の速度が大幅に低下する可能性があります。

[in] hTransaction

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

戻り値

関数が成功した場合、戻り値は 0 以外です。

関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError呼び出します。

ユーザー 操作を取り消したために lpProgressRoutinePROGRESS_CANCEL を返した場合、CopyFileTransacted は 0 を返し、GetLastError ERROR_REQUEST_ABORTEDを返します。 この場合、部分的にコピーされたコピー先ファイルが削除されます。

ユーザー 操作を停止したために lpProgressRoutinePROGRESS_STOP を返した場合、CopyFileTransacted は 0 を返し、GetLastError ERROR_REQUEST_ABORTEDを返します。 この場合、部分的にコピーされたコピー先ファイルはそのまま残ります。

既にロールバックされているトランザクションへのハンドルを使用してこの関数を呼び出そうとすると、CopyFileTransactedERROR_TRANSACTION_NOT_ACTIVE または ERROR_INVALID_TRANSACTIONを返します。

備考

この関数は、拡張属性、OLE 構造化ストレージ、NTFS ファイル システム代替データ ストリーム、セキュリティ属性、およびファイル属性を保持します。

Windows 7、Windows Server 2008 R2、Windows Server 2008、Windows Vista: 既存のファイルの セキュリティ リソース属性 (ATTRIBUTE_SECURITY_INFORMATION) は、Windows 8 および Windows Server 2012 まで新しいファイルにコピーされません。

この関数は、コピー先ファイルが既に存在し、FILE_ATTRIBUTE_HIDDEN または FILE_ATTRIBUTE_READONLY 属性が設定されている場合、ERROR_ACCESS_DENIED で失敗します。

暗号化されたファイルは TxF ではサポートされていません。

COPY_FILE_COPY_SYMLINK を指定すると、次の規則が適用されます。

  • ソース・ファイルがシンボリック・リンクの場合は、ターゲット・ファイルではなくシンボリック・リンクがコピーされます。
  • ソース ファイルがシンボリック リンクでない場合、動作に変更はありません。
  • 宛先ファイルが既存のシンボリック・リンクの場合、ターゲット・ファイルではなくシンボリック・リンクが上書きされます。
  • COPY_FILE_FAIL_IF_EXISTS も指定され、宛先ファイルが既存のシンボリック リンクである場合、操作は失敗します。
COPY_FILE_COPY_SYMLINK が指定されていない場合は、次の規則が適用されます。
  • COPY_FILE_FAIL_IF_EXISTS も指定され、宛先ファイルが既存のシンボリック リンクである場合、シンボリック リンクのターゲットが存在する場合にのみ、操作は失敗します。
  • COPY_FILE_FAIL_IF_EXISTS が指定されていない場合、動作に変更はありません。

リンク追跡は TxF ではサポートされていません。

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

テクノロジー サポート
サーバー メッセージ ブロック (SMB) 3.0 プロトコル いいえ
SMB 3.0 透過的フェールオーバー (TFO) いいえ
SMB 3.0 とスケールアウト ファイル共有 (SO) いいえ
クラスター共有ボリューム ファイル システム (CsvFS) いいえ
回復性のあるファイル システム (ReFS) いいえ
 

SMB 3.0 では TxF がサポートされないことに注意してください。

手記

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

必要条件

要件 価値
サポートされる最小クライアント Windows Vista [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2008 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winbase.h (Windows.h を含む)
ライブラリ Kernel32.lib
DLL Kernel32.dll

関連項目

CopyProgressRoutine

CreateFileTransacted の

ファイル属性定数

ファイル管理機能の

MoveFileTransacted の

シンボリック リンク の

トランザクション NTFS の