Comment puis-je empêcher cette exception System.IO.IOException lors de la copie d'un fichier?

StackOverflow https://stackoverflow.com/questions/267830

  •  06-07-2019
  •  | 
  •  

Question

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 suivant: "Le processus ne peut pas accéder au fichier 'C: \ CopyDirectoryTest1 \ temp.txt' car il est utilisé par un autre processus."

Il semble y avoir un verrou sur le fichier1 ("C: \ CopyDirectoryTest1 \ temp.txt") qui est créé quelques lignes plus haut où l'erreur se produit, mais je ne sais pas comment le libérer 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);
            }
        }
    }
}
Était-ce utile?

La solution

Fichier.Créer Retourne un FileStream ouvert - vous devez fermer ce flux.

Juste

using (File.Create(file1)) {}

devrait faire l'affaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top