2010-11-18 27 views
0

J'exécute un processus distinct qui minimise un dossier de fichiers javascript. Ce processus crée un nouveau fichier pour chacun des fichiers js avec "_min.js" ajouté. L'étape suivante consiste à supprimer les anciens fichiers js (ceux sans "_min.js"). Pour une raison quelconque, File.Delete ne peut pas supprimer ces fichiers.C# Impossible de supprimer le fichier - System.UnauthorizedAccessException

Il semblerait que certains processus ont toujours un handle sur ces fichiers. Je reçois une exception System.UnauthorizedAccessException lorsque j'effectue la suppression. J'ai suffisamment de privilèges dans ce dossier. Quelqu'un peut-il me dire ce que je néglige? Je cours plusieurs fois le processus dans cette boucle.

foreach (var fileInfo in jsFiles) 
      { 
       var outFileName = fileInfo.FullName.Replace(".js", "_min.js"); 

       var compressorPath = "\"C:\\Dev\\Team Interactive Tools\\trunk\\Infrastructure\\MsBuild\\lib\\yuicompressor-2.4.2.jar\""; 
       StringBuilder stringBuilder = new StringBuilder("-jar " + compressorPath + " "); 
       stringBuilder.Append("\"" + fileInfo.FullName + "\""); 
       stringBuilder.Append(" -o " + "\"" + outFileName + "\""); 

       Process p = new Process(); 
       p.StartInfo.FileName = "\"C:\\Program Files (x86)\\Java\\jre6\\bin\\java\""; 
       p.StartInfo.Arguments = stringBuilder.ToString(); 
       p.StartInfo.UseShellExecute = false; 
       p.StartInfo.RedirectStandardOutput = true; 
       p.Start(); 

      } 

      return true; 
     } 

Ensuite, j'essaie de supprimer les orginals:

private void RemoveOrginalJs(FileInfo[] files) 
    { 
     foreach (var fileInfo in files) 
     { 
       File.Delete(fileInfo.FullName); 
     } 
    } 

J'essayé Process.close() après chaque exécution de processus, mais il ne fait aucune différance. Peut-être que les fichiers ont toujours le fichier verrouillé?

+0

Pas plus de commentaires de votre part. Est ce que ça marche maintenant? –

Répondre

1

Je ne sais pas l'outil que vous commencez, mais en attendant son achèvement semble en quelque sorte la bonne chose à faire:

p.Start(); 
p.WaitForExit(); 
0

Attendez-vous qu'ils finissent avant d'essayer de supprimer?

0

Essayez Process.Kill() et supprimez-le ensuite.
De plus, vous devez vérifier si le script ne fonctionne pas dans un autre processus. Pour déterminer cela, essayez d'utiliser Unlocker.