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 Destination はルート ディレクトリであり、名前を変更することはできません。

注釈

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

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

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

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

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

ファイルの接続

Windows 2000 以降では、HTML ファイルを、グラフィックス交換形式 (GIF) イメージやスタイル シートなどの関連ファイルを含むフォルダーに 接続 できます。 ファイル接続が有効になっている場合、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 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー shellapi.h
Library Shell32.lib
[DLL] Shell32.dll (バージョン 4.0 以降)
API セット ext-ms-win-shell-shell32-l1-2-1 (Windows 10 バージョン 10.0.10240 で導入)