問題タブ [shfileoperation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - SHFileOperationの機能
SHFileOperationは、ファイルの移動と名前の変更を同時に行うことをサポートしていますか?
私はファイルのセットを持っています:c:\ f1.bmp f2.bmp f3.bmp f4.bmp
それぞれを新しいフォルダーに移動し、名前を変更します:d:\ b1.bmp b2.bmp b3.bmp b4.bmp
SHFileOperationを使用できますか?一度だけしますか?どうもありがとう!
c++ - SHFileOperation FO_MOVE は、宛先ドライブがいっぱいの場合にファイルを削除します
FO_MOVE操作でWindows SHFileOperation関数を使用するコードがありました。指定された追加のフラグは FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT。
宛先ドライブがいっぱいになると、特定の奇妙な動作が観察されました。この場合、MOVE はファイルを宛先フォルダーに配置できませんでしたが、ソース ファイルも失われました。これは非常に予期せぬことであり、これによりデータが失われました。
これは SHFileOperation の標準的な動作ですか? 宛先ドライブに空き容量がある場合、MOVE のようなものを用意できますか?そうでない場合は、ファイルを元の場所に残しますか?
delphi - ネットワーク共有上のファイルを移動するときのパフォーマンスの問題
ネットワーク共有上のファイルをコピーできるアプリケーションを書いています。通常、ファイルは同じ物理ハードドライブに移動されます。これをWindowsエクスプローラーでテストすると、この操作は非常に迅速に実行されます。Windowsは同じ場所を認識しており、実際の移動を行い、コピーと削除は行わないようです(速度は遅くなります)。
ファイルのセットをコピーしたいとします。
宛先は次のとおりです。
アプリケーションはWindowsシェルAPIを使用します(アプリケーションはDelphiで作成しましたが、問題は他の言語でも同じであるはずです)。
残念ながら、このコードは「コピーと削除」を実行しますが、大きなファイルやファイルがたくさんある場合は非常に遅くなります。どうすればこれを回避できますか?フォルダが同じハードドライブ上にあることを移動操作に伝える方法はありますか?おそらく、ネットワークパスには他の表記法があります。
または、Windowsエクスプローラーで使用される別のAPI関数はありますか?
簡単な比較のために:
- ファイル数:260
- 各ファイルのファイルサイズ:11 kB
- エクスプローラーでの移動時間:2秒
- SHFILEOPERATIONで移動する時間:20秒
開発システムでWindows7を使用していますが、XPでも動作するはずなので、新しいIFileOperationインターフェイスを使用できません。
敬具
c++ - ダブルヌル終了文字列
SHFileOperationを使用するには、文字列をnullで終了する二重文字列にフォーマットする必要があります。
興味深い部分は、次のいずれかが機能していることですが、両方ではありません。
誰かがこれについて考えを持っていますか?
二重終端文字列を追加する他の方法はありますか?
c++ - SHFileOperation は、フォルダーのすべてのコンテンツを移動しません。
これにより、デスクトップに新しいフォルダーが作成されますが、フォルダー .pfrom の内容はフォルダー .pTo に移動されません。
winapi - FOF_NOERRORUI が要求された場合、SHFileOperation によるディレクトリ構造のコピーに失敗しました
あるディレクトリを別のディレクトリにコピーするために SHFileOperation を利用する作業コードがあります。この場合、これは Pascal コードですが、C++ でも同じ関数を使用しており、問題は特定のプログラミング言語ではなく、Windows コアに関連しているようです。
MSDN によると、次のフラグの組み合わせを指定したいと考えています。
つまり、プログレス バーは必要ありません。ファイルとディレクトリに関する可能性のあるすべての質問に対して、暗黙の「はい」の回答を表示しません。また、GUI (ダイアログ ボックス) にエラー メッセージを表示したくありません。
このフラグの組み合わせでは、関数はエラー 0x4C7 を返します (ユーザーによってキャンセルされましたが、これは正しくありません)。FOF_NOERRORUI を削除すると、同じ入力パラメーターとファイルシステムの状態で問題なく動作します。
残念ながら、エラー メッセージも抑制する必要があり、FOF_NOERRORUI フラグが必要です。
私のニーズを満たすために、このフラグの組み合わせ(および他の前提条件である可能性があります)をどのように調整する必要があるかを誰かが知っていますか?
いくつかのバグがあると思うかもしれない人のためのソースコードは次のとおりです。
delphi - ワーカー スレッドで SHFileOperation を使用しても安全ですか?
私はを頂きたい
- 関数を介してファイルをコピーする1つのバックグラウンドスレッド
SHFileOperation
、常に一度SHFileOperation
に1つだけ(ただし、スレッドに入れたい) - UI出力が必要なので、
FOF_SIMPLEPROGRESS
フラグを使用してWnd
メンバーに何かを渡す必要があります
2つの質問があります
- main 以外のスレッドから
SHFileOperation
withフラグ (ユーザー操作用)を呼び出しても安全ですか?FOF_SIMPLEPROGRESS
- はいの場合、どのハンドルを
Wnd
メンバーに渡す必要がありますか? メインフォームのハンドルを試してみたのですが、例えば上書き確認のダイアログが出てきて確認するとメインフォームがバックグラウンドに回ってしまい、どうもおかしいです
注: これらの操作のキューがあるため、一度SHFileOperation
に実行されるのは 1 つだけです (終了後、スレッドは次のアクションに進みますSHFileOperation
) 。
どうもありがとう
file-io - ファイル操作のみを転送する Linux ドライバーを作成する方法は?
(最初のステップでは) すべてのファイル操作を別のファイルに転送するだけの Linux カーネル ドライバーを実装する必要があります (後のステップでは、これを管理および操作する必要がありますが、ここでは説明しません)。
私の考えは次のとおりですが、読み取り時にカーネルがクラッシュします。
だから、誰か私に理由を教えてもらえますか?
c++ - SHFileOperation pFrom = "" の場合は削除
SHFileOperation に関する質問があります。
私の期待は、pathSubDir が "" だったので、何も削除されておらず、n が 0 に等しくないはずだったということでした。しかし、そうではありませんでした。n = 0 になりました。これは、操作が正常に完了したことを意味します。私の仮定が間違っている理由を誰かが説明してくれるかどうか、私は興味がありました. ありがとうございました。
file-management - SHFileOperationファイル置換ダイアログ
現在、SHFileOperationには、ファイルを置き換えるかどうかをユーザーに尋ねる[ファイル置換の確認]ダイアログボックスがいくつかあります。これらは便利だと思いますが、発生するシナリオを変更できるようにしたいと思います。bool compareFile()
代わりに、最初にファイルの内容を自分が作成した関数と比較したいと思います。次に、ファイルが同一である場合、ファイル置換ダイアログボックスは表示されません。私がすでに機能していると仮定すると、compareFile()
これを行う方法はありますか?お時間をいただきありがとうございます。