2008-11-06 5 views
1

Lorsque j'exécute le code suivant pour tester la copie d'un répertoire, j'obtiens une exception System.IO.IOException lorsque la méthode fileInfo.CopyTo est appelée. Le message d'erreur est: "Le processus ne peut pas accéder au fichier 'C: \ CopyDirectoryTest1 \ temp.txt' car il est utilisé par un autre processus."Comment empêcher cette exception System.IO.IOException lors de la copie d'un fichier?

Il semble qu'il y ait un verrou sur le fichier 1 ("C: \ CopyDirectoryTest1 \ temp.txt") qui est créé quelques lignes plus haut où l'erreur se produit, mais je ne sais pas comment le relâcher si c'est le cas. Des idées?

using System; 
using System.IO; 

namespace TempConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string folder1 = @"C:\CopyDirectoryTest1"; 
      string folder2 = @"C:\CopyDirectoryTest2"; 
      string file1 = Path.Combine(folder1, "temp.txt"); 

      if (Directory.Exists(folder1)) 
       Directory.Delete(folder1, true); 
      if (Directory.Exists(folder2)) 
       Directory.Delete(folder2, true); 

      Directory.CreateDirectory(folder1); 
      Directory.CreateDirectory(folder2); 
      File.Create(file1); 

      DirectoryInfo folder1Info = new DirectoryInfo(folder1); 
      DirectoryInfo folder2Info = new DirectoryInfo(folder2); 

      foreach (FileInfo fileInfo in folder1Info.GetFiles()) 
      { 
       string fileName = fileInfo.Name; 
       string targetFilePath = Path.Combine(folder2Info.FullName, fileName); 
       fileInfo.CopyTo(targetFilePath, true); 
      } 
     } 
    } 
} 

Répondre

13

File.Create retourne un FileStream ouvert - vous devez fermer ce flux.

Juste

using (File.Create(file1)) {} 

devrait faire l'affaire.

Questions connexes