La différence entre Fichier.Remplacer et (Fichier.Supprimer+Fichier.Déplacer) en C#

Aujourd'hui, j'ai couru dans un problème étrange: Depuis plus d'un an et plusieurs versions /les tests de l'application, le code suivant a été utilisé avec succès pour remplacer un fichier par un autre.

File.Replace(path + ".tmp", path, null);

Ce a travaillé localement et aussi les chemins d'accès UNC (réseau d'actions). Mais aujourd'hui j'ai eu l'erreur suivante lorsque j'ai utilisé ce code pour remplacer un fichier sur un chemin d'accès UNC (local fonctionne toujours):

Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus

Lorsque j'utilise le code suivant à la place de ce qui précède, il fonctionne:

File.Delete(path);
File.Move(path + ".tmp", path);

Donc mes questions:

  • Quelle est la différence entre les deux fragments de code?
  • Pourrait-il que Microsoft ont changé la façon de Fichier.Remplacer " fonctionne?

Je suis en utilisant .Net Framework 4.0 avec Visual Studio 2010.

Merci d'avance.

  • Vous n'avez pas arriver à avoir un de ces super-désireux de sécurité des outils en cours d'exécution sur le serveur, le désordre de leur "sur la protection d'accès" ou quelque chose, non? Est-ce possible avec tous les serveurs? Il l'a fait arrêter de travailler à une date précise, et - ce qui s'est passé sur le serveur à ce point dans le temps?
  • merci pour votre réponse: nous n'avons pas un spécial "über" outil de sécurité et n'ont pas changé l'infrastructure depuis un certain temps. Le problème apparaît également sur d'autres machines dans d'autres réseaux. Je ne sais pas la date exactement, mais je dirais avant février 2011, il a travaillé...
  • File.Replace demandes de lecture et d'écriture de l'autorisation sur à la fois la source et la destination, alors p/invoque ReplaceFile. Vérifiez les docs sur ReplaceFile pour trouver des indices. msdn.microsoft.com/en-us/library/aa365512.aspx
  • Nous ne pouvons que deviner, il doit travailler. Comme Tergiver dit, la méthode n'a rien fait de spécial. Et vous êtes sûr que votre code (qui, je suppose, écrit *.tmp), à la fermeture de fichier? Car, encore une fois, comme Tergiver dit, la lecture et l'écriture pour les deux fichiers sont demandés. D'abord. Avant que quelque chose se passe dans cette méthode. Manque un Jeter peut-être pour votre écrivain? Ce que j'essaie de dire, c'est: Ne vous focalisez pas trop sur le fichier cible. Les deux pourrait être le problème (à moins que l'erreur se réfère explicitement à la cible).
  • J'ai vérifié l'élimination/la fermeture de tous mes autres actions sur les fichiers et pas - il n'ya pas de manque de disposer/fermer...
InformationsquelleAutor dataCore | 2011-05-13