teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

タイトルの変更,調査して分かったことや困っていることの追記

2021/07/10 11:54

投稿

dem0nmichik0
dem0nmichik0

スコア37

title CHANGED
@@ -1,1 +1,1 @@
1
- SHFileOperationが戻り値87(DE_SRC_IS_DVD)で失敗する原因について
1
+ SHFileOperationはネットワークパスを含んいると失敗するのでしょうか?
body CHANGED
@@ -1,13 +1,23 @@
1
1
  ###実現したいこと
2
- SHFileOperation()のWindowsAPIを使って「HUB経由で接続したPCの共有フォルダからフォルダコピー」と「自PC内におけるフォルダ内のファイル削除」がしたいです。
2
+ SHFileOperation()のWindowsAPIを使って「HUB経由で接続したPCの共有フォルダからフォルダコピー(フォルダ内のファイルも)」がしたいです。
3
3
 
4
4
  ###調査してわかったこと
5
- 1.SHFileOperation()は非推奨となっており、IFileOperation()に置換したほうが良いとわかった
5
+ 1.SHFileOperation()は非推奨となっており、IFileOperation()に置換したほうが良い。
6
6
  ([SHFileOperationからIFileOperationへの移行事例](https://nurs.hatenablog.com/entry/20120519/1337449380)参照)
7
- 2.[28th Embarcadero Developer Camp](https://community.embarcadero.com/images/43816/c2.pdf)のP65によるとIFileOperationはコピー先フォルダがあると失敗することやSHFileOperation()が拡張プレフィックスには対応していない
7
+ 2.[28th Embarcadero Developer Camp](https://community.embarcadero.com/images/43816/c2.pdf)のP65によるとIFileOperationはコピー先フォルダがあると失敗することやSHFileOperation()が拡張プレフィックス(\?)には対応していない
8
+ 3.下記操作をすると,SHFileOperation()を使ったフォルダコピーが失敗する。
9
+ 0. アプリを起動して,選択画面を表示する。
10
+ 0. 選択画面で「ログ表示」ボタンをクリックしてTMemoコントロールにログを表示後,「戻る」ボタンをクリックして,選択画面に戻る。
11
+ 0. 選択画面で「ログ取得」ボタンをクリックして,HUB経由のフォルダを共有したPCからログを取得後,「戻る」ボタンをクリックして,選択画面に戻る。→このときはログはフォルダごとコピー成功。
12
+ 0. 選択画面で「ログ表示」ボタンをクリックしてTMemoコントロールにログを表示後,「戻る」ボタンをクリックして,選択画面に戻る。
13
+ 0. 3で成功したログ取得をフォルダごと削除する。
14
+ 0. 選択画面で「ログ取得」ボタンをクリックして,HUB経由のフォルダを共有したPCからログを取得後,「戻る」ボタンをクリックして,選択画面に戻る。→このときはログはフォルダは作成されるが,ファイルはコピーされない。
8
15
 
9
16
  ### 困っていること
10
- 業務アプリでSHFileOperation()の戻り値が87(DE_SRC_IS_DVD)となって、「フォルダコピー」や「ファイル削除」が失敗します。Windows10でSHFileOperation()は使用しないほうが良いのでしょうか?それとも戻り値から何かわかりますでしょうか?ご存じの方、ご教授お願いします。
17
+ 業務アプリでSHFileOperation()の戻り値が~~87(DE_SRC_IS_DVD)~~0x57(10進数87)(ERROR_INVALID_PARAMETER)となって、「パラメータが間違っている」と分かったので,[Using SHFileOperation: What errors are occuring - Stack ...](https://stackoverflow.com/questions/4568015/using-shfileoperation-what-errors-are-occuring)を参考に下記2つの初期化方法を試しましたが,「フォルダコピー」が失敗します。
18
+ ・ SHFILEOPSTRUCT tSHFile = { 0 };
19
+ ・ZeroMemory(&tSHFile, sizeof(SHFILEOPSTRUCT ));
20
+ Windows10でSHFileOperation()は使用しないほうが良いのでしょうか?ご存じの方、ご教授お願いします。
11
21
 
12
22
  ###ソース
13
23
  業務アプリのため、SHFileOperationの部分の機能を真似て模擬的にテストしているアプリです。実際に問題が起きているソースではありません。問題が起きている個所は「AccessDir」のSHFileOperation()です。define定義の「****」にはユーザ名が入ります。