について少し混乱していFile.Copy
ます。最初は、ディレクトリ構造全体を削除してから、ソース パスからターゲット パスにコピーしていましたが、これには時間がかかりました。今私がやっていることは、ターゲット パスにディレクトリ構造が存在しない場合にのみ作成することです。存在する場合、ファイルが新しい場合にのみコピーしたい。削除を削除した後、コピーは非常に高速になりますが、実際に新しいファイルをコピーしているかどうかはわかりません. もしそうならFile.Copy(source,target)
、これはファイルが存在しない場合にのみコピーされますか? もしそうならFile.Copy(source,target,true)
、それが新しいかどうかに関係なく、これはファイルをコピーしますか?
3 に答える
FileInfo クラスを使用して、ロジック内のファイルを比較する必要があります。
File.Copy(source,target) を実行すると、ファイルが存在しない場合にのみコピーされますか?
File.Copy(source, target)IOException
は、ターゲット ファイルが既に存在する場合 (新しいかどうかに関係なく)をスローします。
これを使用してコードが「高速に実行される」場合は、どこかで「例外を飲み込んでいる」(つまりtry
、空のcatch
ブロックがある) と想定します。プログラムが正しく動作していないときに、正しく動作しているように「見える」ようになるため、これは悪いことです。そうしないでください!それはデバッグを悪夢にします。
File.Copy(source,target,true) を実行すると、新しいかどうかに関係なくファイルがコピーされますか?
はい。
何らかの属性に基づいてファイルをコピーする場合は、FileまたはFileInfo クラス (違いは何ですか? )を使用してこの情報を取得できます。「作成時間」、「最終アクセス時間」、「最終書き込み時間」のいずれかを選択できます (「新しい」の定義方法によって異なります)。
File.Copy(source,target,true)
新しいかどうかに関係なく、ファイルを上書きします。
Copy
ファイルの新しさや正しいアクションを判断するロジックがありません。
このロジックを自分で実装する必要があります。新しいファイルのみをコピーする場合は、両方のファイルの作成日を比較して、新しいファイルのみをコピーする必要があります。