SHFileOperationA 関数 (shellapi.h)
ファイル システム オブジェクトをコピー、移動、名前変更、または削除します。 この関数は、Windows Vista で IFileOperation に置き換えられました。
構文
int SHFileOperationA(
[in, out] LPSHFILEOPSTRUCTA lpFileOp
);
パラメーター
[in, out] lpFileOp
型: LPSHFILEOPSTRUCT
この関数が指定した操作を実行するために必要な情報を含む SHFILEOPSTRUCT 構造体へのポインター。 このパラメーターには 、NULL ではない有効な値が含まれている必要があります。 値を検証する責任はユーザーが負います。 検証しないと、予期しない結果が発生します。
戻り値
型: int
成功した場合は 0 を返します。それ以外の場合は 0 以外。 通常、アプリケーションは 0 または 0 以外のチェックする必要があります。
SHFILEOPSTRUCT の fAnyOperationsAborted メンバーの値を確認することをお勧めします。 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_PERSONAL、 CSIDL_DOCUMENTS) フォルダーと マイ ピクチャ フォルダー (CSIDL_MYPICTURES) です。
ファイルを削除するために使用すると、shFileOperation は、lpFileOp が指す SHFILEOPSTRUCT 構造体の fFlags メンバーに FOF_ALLOWUNDO フラグを設定しない限り、ファイルを完全に削除します。 このフラグを設定すると、ファイルがごみ箱に送信されます。 ファイルを削除するだけで、ごみ箱にファイルが配置されないことを保証する場合は、 DeleteFile を使用します。
コピー コールバック ハンドラーが公開され、登録されている場合、shFileOperation は、lpFileOp が指す構造体の fFlags メンバーにFOF_NOCONFIRMATIONなどのフラグを設定しない限り、それを呼び出します。 コピー コールバック ハンドラーの実装の詳細については、「 ICopyHook::CopyCallback 」を参照してください。
lpFileOp で FOF_NORECURSION フラグを設定しない限り、ファイルの削除は再帰的です。
ファイルの接続
Windows 2000 以降では、HTML ファイルを、グラフィックス交換形式 (GIF) イメージやスタイル シートなどの関連ファイルを含むフォルダーに 接続 できます。 ファイル接続が有効になっている場合、HTML ファイルを移動またはコピーすると、接続されているフォルダーとそのすべてのファイルも移動またはコピーされます。 逆に、関連ファイルを含むフォルダーを移動すると、HTML ファイルも移動されます。HTML ファイルには、.htm または .html 拡張子が必要です。 関連ファイルへの接続を作成するには、そのファイルを含むフォルダーを HTML ファイルと同じフォルダーに配置します。 接続されたファイルを含むフォルダーの名前は、HTML ファイルの名前の後に "_files" または ".files" が続く名前と同じである必要があります (大文字と小文字は区別されます。たとえば、 など)。ファイル" は機能しません)。 例を次に示します。
- C:\Files ディレクトリ (C:\Files\Test.htm) に Test.htm という名前のファイルを作成します。
- C:\Files ディレクトリ (C:\Files\Test.files) に Test.files という名前の新しいフォルダーを作成します。
- フォルダーにいくつかのファイルを設定します。 このフォルダーに配置されたすべてのファイルは、Test.htm に接続されます。
- Test.htm ファイルを C:\Files2 ディレクトリに移動またはコピーします。
- 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 で導入) |