次の方法で共有


MoveFileWithProgressA 関数 (winbase.h)

子を含むファイルまたはディレクトリを移動します。 進行状況通知を受け取るコールバック関数を指定できます。

この操作をトランザクション操作として実行するには、MoveFileTransacted 関数を使用します。

構文

BOOL MoveFileWithProgressA(
  [in]           LPCSTR             lpExistingFileName,
  [in, optional] LPCSTR             lpNewFileName,
  [in, optional] LPPROGRESS_ROUTINE lpProgressRoutine,
  [in, optional] LPVOID             lpData,
  [in]           DWORD              dwFlags
);

パラメーター

[in] lpExistingFileName

ローカル コンピューター上の既存のファイルまたはディレクトリの名前。

dwFlags MOVEFILE_DELAY_UNTIL_REBOOTを指定した場合、遅延操作はネットワークを使用できるようになる前に実行されるため、リモート共有にファイルを存在できません。

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

先端

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

[in, optional] lpNewFileName

ローカル コンピューター上のファイルまたはディレクトリの新しい名前。

ファイルを移動する場合、lpNewFileName は、別のファイル システムまたはボリュームに配置できます。 lpNewFileName が別のドライブにある場合は、dwFlagsで MOVEFILE_COPY_ALLOWED フラグ 設定する必要があります。

ディレクトリを移動するときは、lpExistingFileName と lpNewFileName 同じドライブ上に存在する必要があります。

dwFlags MOVEFILE_DELAY_UNTIL_REBOOT を指定し、lpNewFileName が NULL場合、moveFileWithProgress 、システムの再起動時に削除される lpExistingFileName 登録されます。 削除操作に関する情報を格納するためにレジストリにアクセスできない場合、関数は失敗します。 lpExistingFileName がディレクトリを参照している場合、システムは、ディレクトリが空の場合にのみ、再起動時にディレクトリを削除します。

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

先端

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

[in, optional] lpProgressRoutine

CopyProgressRoutine ファイルの別の部分が移動されるたびに呼び出されるコールバック関数へのポインター。 コールバック関数は、操作の進行状況を表示するユーザー インターフェイスを提供する場合に便利です。 このパラメーターは NULLできます。

[in, optional] lpData

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

[in] dwFlags

移動オプション。 このパラメーターには、次の値のうち 1 つ以上を指定できます。

価値 意味
MOVEFILE_COPY_ALLOWED
2 (0x2)
ファイルを別のボリュームに移動する場合、この関数は CopyFile を使用して移動をシミュレートし、DeleteFile 関数を します。

ファイルが別のボリュームに正常にコピーされ、元のファイルを削除できない場合、関数はソース ファイルをそのまま残して成功します。

この値は MOVEFILE_DELAY_UNTIL_REBOOTでは使用できません。

MOVEFILE_CREATE_HARDLINK
16 (0x10)
将来の使用のために予約されています。
MOVEFILE_DELAY_UNTIL_REBOOT
4 (0x4)
オペレーティング システムが再起動されるまで、システムはファイルを移動しません。 システムは、AUTOCHK が実行された直後に、ページング ファイルを作成する前にファイルを移動します。 したがって、このパラメーターを使用すると、関数は以前のスタートアップからページング ファイルを削除できます。

この値は、プロセスが管理者グループまたは LocalSystem アカウントに属するユーザーのコンテキストにある場合にのみ使用できます。

この値は、MOVEFILE_COPY_ALLOWEDでは使用できません。

MOVEFILE_FAIL_IF_NOT_TRACKABLE
32 (0x20)
ソース ファイルがリンク ソースである場合、関数は失敗しますが、移動後にファイルを追跡することはできません。 この状況は、ターゲットが FAT ファイル システムでフォーマットされたボリュームである場合に発生する可能性があります。
MOVEFILE_REPLACE_EXISTING
1 (0x1)
lpNewFileName という名前 ファイルが存在する場合、関数はその内容を lpExistingFileName ファイルの内容に置き換えます。

lpNewFileName 、または lpExistingFileName ディレクトリ名を指定する場合、この値は使用できません。

MOVEFILE_WRITE_THROUGH
8 (0x8)
この関数は、ファイルが実際にディスク上に移動されるまで戻りません。

この値を設定すると、コピーおよび削除操作として実行された移動が、関数が戻る前にディスクにフラッシュされます。 フラッシュはコピー操作の最後に行われます。

MOVEFILE_DELAY_UNTIL_REBOOT が設定されている場合、この値は無効です。

戻り値

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

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

ボリューム間でファイルを移動するときに、ユーザーが操作を取り消したために lpProgressRoutine PROGRESS_CANCEL を返した場合、MoveFileWithProgress は 0 を返し、GetLastError ERROR_REQUEST_ABORTEDを返します。 既存のファイルはそのまま残ります。

ボリューム間でファイルを移動するときに、ユーザーが操作を停止 lpProgressRoutinePROGRESS_STOP を返した場合、MoveFileWithProgress は 0 を返し、GetLastError ERROR_REQUEST_ABORTEDを返します。 既存のファイルはそのまま残ります。

備考

MoveFileWithProgress 関数は、その操作をリンク追跡サービスと調整するため、リンク ソースを移動時に追跡できます。

ファイルを削除または名前変更するには、そのファイルに対する削除権限を持っているか、親ディレクトリの子権限を削除する必要があります。 削除と削除の子を除くすべてのアクセス権を持つディレクトリを設定し、新しいファイルの ACL が継承されている場合は、削除できないファイルを作成できます。 ただし、ファイルを作成すると、ファイルの作成時に返されたハンドルに対して要求したすべてのアクセス権が取得されます。 ファイルの作成時に削除アクセス許可を要求した場合は、そのハンドルを使用してファイルを削除または名前変更できますが、他のハンドルでは削除できません。

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

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

CsvFs は、圧縮ファイルに対してリダイレクトされた IO を実行します。

手記

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

必要条件

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

関連項目

CopyFileEx

CopyProgressRoutine

ファイル管理機能の

MoveFileEx の

MoveFileTransacted の