1

アプリケーションの更新を実行するために、ロックされた .dll ファイルを移動 (File.Move) しようとしています。File.Move メソッドは例外なく実行されました。しかし、ファイルは移動されませんでした。つまり、File.Move メソッドを実行した後、同じファイルのコピーが 2 つあるということです。宛先フォルダーとソース フォルダーにあります。ここにコードがあります:)

File.Move(fileName, newFileName);

誰かがこの理由を説明できますか?

4

3 に答える 3

7

ボリューム間での File.Move は、次の 2 つの操作を順番に実行します。

  1. ファイルコピー
  2. ファイルの削除

1 つ目は成功し、2 つ目は静かに失敗したように見えます。期待通りの結果。

ここからのメモ: http://msdn.microsoft.com/en-us/library/system.io.file.move.aspx

ディスク ボリューム間でファイルを移動しようとして、そのファイルが使用中の場合、ファイルは移動先にコピーされますが、移動元からは削除されません。

于 2012-04-12T09:11:35.070 に答える
0

通常、この場合、アプリの DLL を必要としない別の更新プロセスがあるため、必要なものをすべて移動して更新を実行し、アプリを再起動できるアップデーターを生成します。

または、インストーラーのように、次回の再起動時にファイルの変更を送信します。

于 2012-04-12T09:12:19.810 に答える
0

File.Moveメソッドは、最初にファイルfileNameをファイル ' newFileName' にコピーします。最初のステップが成功すると、ファイル ' fileName' が削除されます。

ファイル ' fileName' が既に開いているかロックされている場合、ファイルを削除することはできません。

于 2012-04-12T09:13:53.903 に答える