Comment puis-je supprimer un fichier qui est en cours d'utilisation par un autre processus?
Lorsque j'essaie de supprimer un fichier se produit l'exception suivante:
Le processus ne peut pas accéder au fichier"
parce qu'il est utilisé par un autre
processus.
Mon code ressemble à ceci:
string[] files = Directory.GetFiles(@"C:\SEDocumentConverter\SOURCE");
foreach (string file in files)
{
File.Delete(file);
}
Comment puis-je résoudre ce problème?
Découvrez quels sont les autres processus de l'accès au fichier, et de l'empêcher de le faire.
Avez-vous un fichier ouvert dans un éditeur? Travaillez-vous avec l'un des fichiers plus tôt dans votre programme et peut-être partir un flux ouvert?
Est l'erreur que vous avez tapé à - dire un nom de fichier vide est retourné, ou avez-vous juste enlevé le nom de la question?
vous pouvez suivre cette solution stackoverflow.com/questions/13262548/...
Avez-vous un fichier ouvert dans un éditeur? Travaillez-vous avec l'un des fichiers plus tôt dans votre programme et peut-être partir un flux ouvert?
Est l'erreur que vous avez tapé à - dire un nom de fichier vide est retourné, ou avez-vous juste enlevé le nom de la question?
vous pouvez suivre cette solution stackoverflow.com/questions/13262548/...
OriginalL'auteur Suresh Chaudhary | 2011-03-08
Vous devez vous connecter pour publier un commentaire.
Il n'existe aucun moyen de supprimer un fichier qui est actuellement utilisé par un autre processus. Vous devez fermer le programme a que le fichier est ouvert en premier, avant de vous pouvez le supprimer.
Si vous ne l'avez pas déjà savoir quel est le programme qui est, vous pouvez le comprendre, à l'aide de Poignée ou Process Explorer.
OriginalL'auteur Cody Gray
Vous pouvez P/Invoke Windows MoveFileEx la fonction et l'utilisation du MOVEFILE_DELAY_UNTIL_REBOOT drapeau, avec une valeur NULL nom de destination. Cela permettra de supprimer le fichier lorsque vous redémarrez.
OriginalL'auteur Polyfun
Si le fichier est utilisé, vous êtes hors de la chance en essayant de le supprimer. Je ne peux pas vous en fonction de votre code de ce processus peuvent utiliser le fichier(s), mais essayez de regarder ici ou ici ou ici, ou à l'un des autres questions qui apparaissent comme liées à celle-ci pour des orientations sur cette question, et par tous les moyens de suivre les conseils de @Cody Gris sur l'utilisation de l'Explorateur de Processus.
Oui, qui l'eut cru? Et comme une note de @Suresh - vous devriez voir une liste de questions que de Débordement de Pile pense comme celle que vous vous posez lorsque vous tapez dans la ligne objet de votre question. Si vous cochez ceux d'abord, vous pourriez trouver votre réponse et vous épargner la peine de poster.
OriginalL'auteur Zannjaminderson
légèrement hors sujet: Mais il semble à partir de votre code que vous essayez de supprimer tous les fichiers de votre dossier.
Eh bien au lieu de les supprimer un par un, nous avons une autre méthode de Répertoire.Supprimer(chemin d'accès, True) qui permet de supprimer le répertoire contenu dans la chaîne nommée chemin. Ensuite, vous pouvez recréer le répertoire si vous le souhaitez. Mais votre problème peut persister ici aussi.
OriginalL'auteur
Une autre façon est de trouver tous les descripteurs ouverts sur le fichier et fermer par la force.
Œuvres de gentil pour vous, mauvais pour toutes les applications qui ont été en utilisant le fichier.
Pourriez essayer cela dans l'INTERFACE utilisateur avec SysInternals ProcessExplorer.
OriginalL'auteur hypersw
Juste renommer ce fichier. Cela va faire la chose pour celui qui essaie d'écrire à cet emplacement.
Notes:
1) bien sûr, le fichier n'est pas supprimé physiquement encore. Agréable de faire de la
MoveFileEx
truc mentionné ici, autour de terminer le travail.2) Si vous souhaitez supprimer un fichier verrouillé pour écrire qch de nouveau à sa place (par exemple, lors de la construction), il suffit de renommer le fichier à un nom GUID. Si vous avez besoin du dossier à nettoyer, utiliser un ignorés extension /attribut caché, ou renommer le fichier dans un chemin d'accès en vertu de
%TEMP%
(si sur le même disque).3) Pas tous les fichiers verrouillés ne peuvent pas être renommées, mais il fonctionne pour moi comme pour 90% des applications pratiques. Vous pouvez déplacer un fichier sans affecter une ouverture en lecture/écriture/exécution de la poignée, il continuera à travailler avec le fichier déplacé juste de la bonne (si déplacé dans le même volume NTFS, bien sûr).
4) Qu'est ce que Windows Installer serait essentiellement le faire avant qu'il vous demande s'il vous plaît redémarrer quelque part bientôt: déplacer le fichier loin de vos yeux, l'horaire seront supprimés lors du redémarrage. Habituellement, l'application nouvellement installée peut être utilisé immédiatement.
Utilisation Pratique:
Mon préféré, c'est avec MSBuild. Substitution de la
<Copy/>
tâche avec ce truc qui fait toute la bâtir des aller de linux. Vous n'avez pas de soins si une précédente version est encore en cours d'exécution, quelque part, peut encore build&run. L'ancienne application continue d'utiliser l'ancienne version des fichiers. La nouvelle application des charges de la nouvelle version écrite.Pourrait progresser à
%TEMP%
si sur le même disque (pas mon cas). Je venais tout juste de les renommer à une extension qui est ignoré avec la source de courant de contrôle du client.OriginalL'auteur hypersw