次の方法で共有


SHFileOperationA 関数 (shellapi.h)

ファイル システム オブジェクトをコピー、移動、名前変更、または削除します。 この関数は、Windows Vista で IFileOperation置き換えられました。

構文

int SHFileOperationA(
  [in, out] LPSHFILEOPSTRUCTA lpFileOp
);

パラメーター

[in, out] lpFileOp

型: LPSHFILEOPSTRUCT

この関数が指定した操作を実行するために必要な情報を含む SHFILEOPSTRUCT 構造体へのポインター。 このパラメーターには、NULLされていない有効な値が含まれている必要があります。 値の検証はユーザーが行う必要があります。 検証しないと、予期しない結果が発生します。

戻り値

型: int

成功した場合は 0 を返します。それ以外の場合は 0 以外。 通常、アプリケーションでは 0 または 0 以外のチェックを行う必要があります。

SHFILEOPSTRUCTfAnyOperationsAborted メンバーの値を調べることが適切です。 SHFileOperation 、ユーザーが操作をキャンセルした場合に成功した場合に 0 を返すことができます。 fAnyOperationsAborted と戻り値 チェックしないと、関数が要求した完全なタスクを完了したことを知ることができず、正しくない前提の下で続行する可能性があります。

この関数の戻り値 GetLastError を使用しないでください。

トラブルシューティングのために 0 以外の値を調べるには、主に Winerror.h で定義されているものにマップされます。 ただし、いくつかの可能な戻り値は Win32 より前のエラー コードに基づいており、場合によっては、その意味を一致させることなく、後の Winerror.h 値と重なります。 これらの特定の値について詳しく説明します。これらの特定の値の は、Winerror.h コードでこれらの意味を受け入れる必要がある だけです。 ただし、これらの値には次の警告が表示されます。

  • これらは Win32 より前のエラー コードであり、パブリック ヘッダー ファイルではサポートも定義もされていません。 これらを使用するには、自分で定義するか、数値と比較する必要があります。
  • これらのエラー コードは変更される可能性があり、従来は変更されています。
  • これらの値は、デバッグの補助としてのみ提供されます。 彼らは決定的と見なすべきではありません。
エラー コード 価値 意味
DE_SAMEFILE 0x71 ソース ファイルとコピー先ファイルは同じファイルです。
DE_MANYSRC1DEST 0x72 ソース バッファーには複数のファイル パスが指定されましたが、宛先ファイル パスは 1 つだけです。
DE_DIFFDIR 0x73 名前の変更操作が指定されましたが、宛先パスが別のディレクトリです。 代わりに移動操作を使用してください。
DE_ROOTDIR 0x74 ソースはルート ディレクトリであり、移動したり名前を変更したりすることはできません。
DE_OPCANCELLED 0x75 操作がユーザーによって取り消されたか、適切なフラグが SHFileOperationに指定された場合 サイレント キャンセルされました。
DE_DESTSUBTREE 0x76 変換先は、ソースのサブツリーです。
DE_ACCESSDENIEDSRC 0x78 セキュリティ設定により、ソースへのアクセスが拒否されました。
DE_PATHTOODEEP 0x79 ソースパスまたは宛先パスがMAX_PATHを超えたか、または超過します。
DE_MANYDEST 0x7A 操作には複数の移動先パスが含まれており、移動操作の場合は失敗する可能性があります。
DE_INVALIDFILES 0x7C ソースまたは宛先のパス、またはその両方が無効です。
DE_DESTSAMETREE 0x7D ソースとコピー先の親フォルダーは同じです。
DE_FLDDESTISFILE 0x7E 宛先パスは既存のファイルです。
DE_FILEDESTISFLD 0x80 コピー先のパスは既存のフォルダーです。
DE_FILENAMETOOLONG 0x81 ファイルの名前がMAX_PATHを超えています。
DE_DEST_IS_CDROM 0x82 変換先は読み取り専用 CD-ROM であり、フォーマットされていない可能性があります。
DE_DEST_IS_DVD 0x83 宛先が読み取り専用 DVD であり、フォーマットされていない可能性があります。
DE_DEST_IS_CDRECORD 0x84 宛先は書き込み可能な CD-ROM であり、フォーマットされていない可能性があります。
DE_FILE_TOO_LARGE 0x85 操作に関係するファイルが、転送先メディアまたはファイル システムに対して大きすぎます。
DE_SRC_IS_CDROM 0x86 ソースは読み取り専用 CD-ROM であり、フォーマットされていない可能性があります。
DE_SRC_IS_DVD 0x87 ソースは読み取り専用 DVD であり、フォーマットされていない可能性があります。
DE_SRC_IS_CDRECORD 0x88 ソースは書き込み可能な CD-ROM であり、フォーマットされていない可能性があります。
DE_ERROR_MAX 0xB7 MAX_PATH操作中に超過しました。
0x402 不明なエラーが発生しました。 これは通常、ソースまたは宛先のパスが無効であることが原因です。 このエラーは、Windows Vista 以降では発生しません。
ERRORONDEST 0x10000 宛先で未指定のエラーが発生しました。
DE_ROOTDIR |ERRORONDEST 0x10074 変換先はルート ディレクトリであり、名前を変更することはできません。

備考

この関数では、完全修飾パス名を使用する必要があります。 相対パス名と共に使用することは、スレッド セーフではありません。

2 つの例外を除き、SHFileOperation を使用して、ネットワーク パスを指定して特殊なフォルダーをローカル ドライブからリモート コンピューターに移動することはできません。 ただし、マイ ドキュメント (CSIDL_PERSONALCSIDL_DOCUMENTS) と [マイ ピクチャ] フォルダー (CSIDL_MYPICTURES) を します。

ファイルの削除に使用すると、SHFileOperation は、lpFileOpが指す SHFILEOPSTRUCT 構造体の fFlags メンバーに FOF_ALLOWUNDO フラグ 設定しない限り、ファイルを完全に削除します。 このフラグを設定すると、ファイルがごみ箱に送信されます。 ファイルを削除するだけで、ごみ箱にファイルが配置されていないことを保証する場合は、DeleteFile使用します。

コピー コールバック ハンドラーが公開および登録されている場合、lpFileOpによって指される構造体の fFlags メンバーに FOF_NOCONFIRMATION などのフラグを設定しない限り、SHFileOperation によって呼び出 。 コピー コールバック ハンドラーの実装の詳細については、ICopyHook::CopyCallback の を参照してください。

lpFileOpで FOF_NORECURSION フラグ 設定しない限り、ファイルの削除は再帰的です。

ファイルの接続

Windows 2000 以降では、グラフィックス交換形式 (GIF) イメージやスタイル シートなどの関連ファイルを含むフォルダー HTML ファイルに 接続できます。 ファイル接続が有効になっている場合、HTML ファイルを移動またはコピーすると、接続されているフォルダーとそのすべてのファイルも移動またはコピーされます。 逆に、関連ファイルを含むフォルダーを移動すると、HTML ファイルも移動されます。

HTML ファイルには、.htm または .html 拡張子が必要です。 関連ファイルへの接続を作成するには、関連ファイルを含むフォルダーを HTML ファイルと同じフォルダーに配置します。 接続されたファイルを含むフォルダーの名前は、HTML ファイルの名前の後に "_files" または ".files" が続く名前と同じである必要があります (大文字と小文字が区別されます。たとえば"。ファイル" は機能しません)。 例を次に示します。

  1. C:\Files ディレクトリ (C:\Files\Test.htm) に Test.htm という名前のファイルを作成します。
  2. C:\Files ディレクトリ (C:\Files\Test.files) に Test.files という名前の新しいフォルダーを作成します。
  3. フォルダーにいくつかのファイルを設定します。 このフォルダーに配置されたすべてのファイルは、Test.htmに接続されます。
  4. Test.htm ファイルを C:\Files2 ディレクトリに移動またはコピーします。
  5. Test.files ディレクトリは C:\Files2 ディレクトリにも存在します。

ファイル接続は既定で有効になっています。 次に示すように、REG_DWORD エントリ NoFileFolderConnection を追加することで無効にすることができます。

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  NoFileFolderConnection

NoFileFolderConnection を 1 に設定すると、ファイル接続が無効になります。 値が 0 に設定されているか、存在しない場合は、ファイル接続が有効になります。

指定したファイルのみを移動し、接続されているファイルを移動しない場合は、lpFileOpが指す構造体の fFlags メンバーに FOF_NO_CONNECTED_ELEMENTS フラグ 設定します。

"MyFile_files" のような名前のフォルダーを使用して接続を定義することは、ローカライズされたバージョンの Windows では無効な場合があることに注意してください。 "files" という用語は、ローカル言語の同等の単語に置き換える必要がある場合があります。

手記

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

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー shellapi.h
ライブラリ Shell32.lib
DLL Shell32.dll (バージョン 4.0 以降)
API セットの ext-ms-win-shell-shell32-l1-2-1 (Windows 10 バージョン 10.0.10240 で導入)