2010-05-13 6 views
1

J'essaye un simple mouvement comme indiqué ci-dessous et j'obtiens l'erreur suivante: "Le processus ne peut pas accéder au fichier parce qu'il est utilisé par un autre processus." Comment puis-je réparer ça? Merci.Erreur File.Move en C#

FileInfo file1 = new FileInfo(srcFile); 
if (file1.Exists) 
{ 
FileInfo file2 = new FileInfo(destFile); 
if (!file2.Exists) 
{ 
    try 
    { 
    File.Move(srcFile, destFile); 
    } 
    catch (System.IO.IOException e) 
    { 
    Console.WriteLine(e.Message); 
    } 
} 
} 

Répondre

3

Créez-vous ou ouvrez-vous le fichier 1 à partir de votre code? Si c'est le cas, vous devrez fermer le FileStream avant de tenter le déplacement.

+0

Merci - c'était le problème. Fixé maintenant –

4

L'erreur signifie que le fichier est utilisé:

  • soit par votre application (vous devez fermer le fichier afin de pouvoir le déplacer)
  • ou par une autre application . Vous ne pouvez pas faire grand-chose ici, mais réessayez plus tard.
2

Utilisez procmon pour savoir quel processus utilise le fichier et gérer la situation.

1

Lorsque vous attrapez cette exception, vous pouvez essayer d'appeler l'API Windows MoveFileEx, avec le drapeau MOVEFILE_DELAY_UNTIL_REBOOT. Cela déplacera le fichier la prochaine fois que vous redémarrerez; C'est ce que les installateurs veulent normalement faire lorsqu'ils détectent un fichier verrouillé. Vous devez être administrateur ou LocalSystem pour que cela fonctionne.

0

peut-être ouvrir le fichier1 dans votre code avant de le déplacer et ne pas fermer le flux de fichiers