免責事項: ファイルシステムの機能に関する詳細については、私はまったく無知です。私はNTFSを長年使ってきましたが、私が目にした行動だけでなく、私がインターネット上でのドーキングから学んだことに基づいて、何が起こっているのかを推測することができます -File.Moveに「コピー - >削除」が必要か、ファイルシステムテーブル内の場所を変更するかを検出
ありがとうございました'場所A'から '場所B'にファイルを移動するときに、 'File.Copy - > File.Delete'と同等の操作が必要かどうか、または実際のファイルデータをコピーしないかどうかを検出する方法「マスターファイルテーブル」などの場所を更新するだけです。
さまざまな目的のために、大量の大きなファイルを移動することがあります。私はUIの進捗状況を報告したい。
File.Moveを呼び出してあるディスク/パーティション上の場所から別の場所にファイルを移動すると、その関数は効果的にディスク/パーティション間で 'ファイルデータのコピー - 削除'する必要があります。このような状況に遭遇したとき、私は、ファイルがコピーされ、バイトが転送されるときに詳細な進行状況レポートを提供するように、UIでプログレスバーを頻繁に更新できるように、コードを使用できるようになることを検出できるようにしたい。
同じディスク/パーティション上にある場合、マスターファイルテーブル内の場所を更新する速度が非常に速いため、バッチ移動しているファイルごとにfile.Move関数が完了するとプログレスバーが更新されます。
.NET 4(C#)を使用すると、File.Moveの呼び出しで同等の 'コピー - >削除'操作が必要かどうか、または単にファイルテーブルを更新してファイルデータをコピーしないかどうかを他の方法で検出できますか? ?
編集:
私は以下のコメントに注意したように、私はこのが行われるかもしれないと思ったどのように可能性が与えられたソースファイルの場所と宛先ファイルの場所は、同じ物理的に配置されているかどうかを検出することですディスク&パーティションがある場合は、正確にその動作を予測し、呼び出す関数を決定することができます - 同じディスクに移動するときに発生すると思われる「ほぼ即時」の更新ファイルシステムテーブルのFile.Move関数/ part、または私のより詳細な 'レポートの進捗状況' x 'bytes copied'カスタムファイルのコピーコード。ファイル転送速度はプログラムが実行されるマシンによって大きく異なるため、可能であれば、詳細な進行状況/現在の転送速度を報告できるようにしたいと考えています。
注 - プログラムは、同じルートパスを持つ異なる物理ディスクを使用するネットワークUNCパスを使用している可能性があります。\\ somename \ shares \ workfolder \ projectは別の物理ディスク上にある可能性があります。\\ somename \ shares \ workfoldder \ otherproject。だから私はパーティションIDまたは物理ディスクIDを検出するためのメソッドが必要ですが、同じディスク/パーティション上のソースと宛先のフォルダ。
あなたは
あなたはこれを尋ねる理由がありますが、私はファイルシステムがこのプロセスで取られた究極の決定についてあなたに知らせることはできません。 ShellFileCopyを使うことができたら、Windowsはコピーや移動中に表示されるちょっとしたダイアログで進捗バーを処理しています。 –
特定のソースファイルの場所とコピー先のファイルの場所が同じ物理ディスクとパーティションにあるかどうかを検出する方法があると思っていました。もしそうなら、正しく動作を予測できます。私は簡単にmsdnでこれを行う方法を見つけることができませんでした。さらに、上記の私のコメントのアプローチがすべてのファイルシステムではうまくいかないかもしれないので、人々が私に注意を促すことを期待していました。 ShellFileCopy APIを使用していただきありがとうございます。私はそれを調べますが、可能であれば自分のライブラリを使いたいと思います。 – JHubbard80
これは、技術的な証拠ではなく、これに対する答えを得るための簡単な方法です。速度。ファイルをコピーすると、実際にファイルを移動している間にすべてのバイトを書き込む必要があり、ファイルのヘッダーを書き換えます。そのため、1GBのファイルを5回動かすようにしてください。それが即座に実行されるならば、動いています。年月がかかると、コピー - >削除です。個人的には、 'System.IO.File.Move()'はファイルを移動すると思います。なぜなら、パフォーマンスのためにコピー - >削除すればばかげてしまうからです。 – Aidiakapi