• ベストアンサー

SHFileOperationの戻り値

OS:Win95、VB 5.0 SP3でSHFileOperation を使用してファイルコピーを実行しているのですが上書き確認で「いいえ」を押した時やコピーの実行中ダイアログのキャンセルボタンを押した時の戻り値などご存知の方いましたら、どうか教えて下さい。 (「いいえ」ボタンやキャンセルボタンを押しても、0でしか帰ってきません。) いろんなサイトを見て回ったのですが、戻り値について詳しく書いてあるところがありませんでした。 どなたかお助け下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>上書き確認で「はい」を答えたか「いいえ」を答えたかは、判定できないのでしょうか? どうも、戻り値で判定するのは無理のようですね。 どうしても上書きさせたいのであれば、FOF_NOCONFIRMATIONを指定すれば上書き確認メッセージは出てこなくなりますけども。 あとは、実際にAPI内でコピー等が行われたファイルが何かは、hNameMappingsの内容から取得できる(FOF_WANTMAPPINGHANDLEの指定が必要)ので、 上書きされたかはこれで判断するしかなさそうです。 FDがドライブに入っていないときなんですが、当方でも試したところ、戻り値0、fAnyOperationsAbortedも0でしたので、これも判断できないようですね。

AREC
質問者

お礼

このAPIだけでは無理なようですね。 他の関数やAPIを使用して何とか実現してみます。 いろいろ、ありがとうございました。

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>MSDNを見ました。問題は無いように思います。 ちゃんと読みましょう(^^;;; >int SHFileOperation( LPSHFILEOPSTRUCT >lpFileOp >); >Return Value > >Returns zero if successful, or nonzero otherwise. 戻り値はBOOLではなくintです。 で、0が成功、0以外が失敗です。 また、API自体の成功失敗をあらわすだけなので、キャンセルされたかはfAnyOperationsAbortedをチェックする必要があるのです。

AREC
質問者

補足

下記のロジックでテストしていますが、上書き確認で「はい」を答えようが「いいえ」を答えようが戻り値もfAnyOperationsAbortedもゼロです。コピー中にキャンセルを押すと戻り値が117が戻ってきます。 戻り値やfAnyOperationsAbortedの値の意味が記載されているページをMSDN内に見つけられませんでした(探し方が甘いのかもしれませんが)上書き確認で「はい」を答えたか「いいえ」を答えたかは、判定できないのでしょうか? また、フロッピーが入っていないときの警告にキャンセルを答えた場合の両方の値はゼロです。ちなみに、コピーが成功した場合も両方の値はゼロです。 SH.hwnd = Me.hwnd SH.wFunc = FO_COPY SH.pFrom = "C:\My Documents\TEST.txt" SH.pTo = "A:\TEST.txt" Ret = SHFileOperation(SH) If Ret = 0 Then msgbox SH.fAnyOperationsAborted else msgbox Ret End If

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1
AREC
質問者

補足

ご回答ありがとうございます。 MSDNを見ました。問題は無いように思います。 fAnyOperationsAbortedをチェックしたところ、こちらは正常に終了(ファイルがコピーされていることも確認しました)してもFALSEしか帰ってきません。 なぜでしょうか?

関連するQ&A