2013-05-06 7 views
4

Après avoir copié un fichier dans un répertoire temporaire, je ne parviens pas à supprimer la copie en raison d'une exception UnauthorizedAccessException. L'idée ici est d'obtenir une copie du fichier, le compresser et ensuite supprimer la copie, mais après avoir enlevé tout le code entre File.Copy et File.Delete je reçois toujours l'exception. Quitter le programme libère le verrou et me permet de supprimer la copie sans problème.Impossible de supprimer le fichier temporaire après File.Copy dans C#

Existe-t-il un moyen de copier sans provoquer ce verrouillage persistant (et conserver les métadonnées de fichier comme LastModified)? Ou un moyen de libérer la serrure? Devrait-il y avoir un verrou sur le fichier copié après la fin du File.Copy? J'utilise Visual C# 2010 SP1 ciblant .NET Framework 4.0.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.IO; 
using System.Xml; 

namespace Test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      String FileName = "C:\\test.txt"; 
      // Generate temporary directory name 
      String directory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); 
      // Temporary file path 
      String tempfile = Path.Combine(directory, Path.GetFileName(FileName)); 
      // Create directory in file system 
      Directory.CreateDirectory(directory); 
      // Copy input file to the temporary directory 
      File.Copy(FileName, tempfile); 
      // Delete file in temporary directory 
      File.Delete(tempfile); 
     } 
    } 
} 
+0

Run VS 2010 en tant qu'administrateur –

+0

Est-il possible que vous ne fermez pas tempFile dans 'Autres opérations performed' – I4V

+0

@JibranKhan en cours d'exécution en tant qu'administrateur n » t aide. – jveazey

Répondre

5

Vérifiez votre fichier "C:\\test.txt" en lecture seulement ou non.

basé sur vos commentaires cela peut être la raison pour laquelle vous pouvez copier, mais vous ne pouvez pas supprimer

essai avec ci-dessous

File.SetAttributes(tempfile, FileAttributes.Normal); 
File.Delete(tempfile); 
+0

Comment se fait-il que "Sortir du programme libère le verrou et me permet de supprimer la copie sans problème." ? – VdesmedT

0

Je vois que vous avez déjà trouvé une réponse, mais je vais ajoutez ceci pour la référence de toute façon; Une approche alternative possible pour vous, pourrait être de créer la copie dans un flux de mémoire au lieu de copier le fichier sur votre disque dur.

Utilisation du DotNetZip library, vous pourriez faire quelque chose comme ceci:

using (var ms = new MemoryStream()) 
{ 
    using (var zip = new ZipFile()) 
    { 
     zip.AddEntry(fileName, data); 
     zip.Save(ms); 
    } 
} 
Questions connexes