Fichier est utilisé par un autre processus après le Fichier.Copie
Je suis en train de gérer les fichiers dans mon application web. Parfois, je dois créer un fichier dans un dossier (avec "Fichier".Copy):
File.Copy(@oldPath, @newPath);
Et quelques secondes plus tard que le fichier peut être supprimé:
if (File.Exists(@newPath)) {
File.Delete(@newPath);
}
Cependant, je ne sais pas pourquoi le nouveau fichier reste bloqué par le processus serveur (IIS, w3wp.exe) après le Fichier.Copie. Après De Fichier.Supprimer-je obtenir de l'exception:
"Le processus ne peut pas accéder au fichier car ce fichier est utilisé par
un autre processus."
Selon l'Api, File.La copie ne pas bloquer le fichier, est-il?
J'ai essayé de libérer les ressources, mais il n'a pas fonctionné. Comment puis-je résoudre ce problème?
Mise à JOUR: en Effet, à l'aide de l'Explorateur de Processus le fichier est bloqué par des processus IIS. J'ai essayé de mettre en œuvre le code de copie afin de libérer manuellement les ressources, mais le problème reste:
public void copy(String oldPath, String newPath)
{
FileStream input = null;
FileStream output = null;
try
{
input = new FileStream(oldPath, FileMode.Open);
output = new FileStream(newPath, FileMode.Create, FileAccess.ReadWrite);
byte[] buffer = new byte[32768];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
}
}
catch (Exception e)
{
}
finally
{
input.Close();
input.Dispose();
output.Close();
output.Dispose();
}
}
Le fichier provient d'un autre système, il est changé en elle, je doit remplacer l'ancien. Je suis en train d'élaborer un "miroir" du système.
Peut-être cette même question qui pourrait vous aider: stackoverflow.com/questions/7937966
File.Copy()
toujours remplir et fermer le descripteur de fichier avant de retourner.Peut-être il y a encore une poignée sur le fichier quelque part? Avez-vous un fichier d'une façon quelconque? Peut-être que l'objet se bloque encore en mémoire? Le blocus durer éternellement, sans redémarrer IIS?
OriginalL'auteur jbernal | 2013-08-06
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer Process Explorer de trouver l'application qui a ouvert le descripteur de fichier.
Si Process Explorer ne peut pas trouver que l'utilisation Le Moniteur De Processus de retracer le processus qui est en train d'essayer d'accéder au fichier.
OriginalL'auteur aaron cheung
Cela peut être causé par le fichier indexeurs ou un logiciel anti-virus, qui en général en revue tous les nouveaux fichiers.
Vous pouvez essayer Process Explorer à partir de sysinternals. À l'aide de la poignée ou de la DLL" fonctionnalité va vous montrer les processus qui ont une ouverture sur la poignée de votre fichier.
Programme très utile. Je l'ai utilisé, et d'ailleurs le seul processus qui utilise le fichier est w3wp.exe (IIS). Je vais mettre en œuvre la fonction de copie avec des cours d'eau afin d'écrire explicitement le close() ou dispose() de la phrase.
OriginalL'auteur x5657
Fichier a été bloqué par un autre processus, sans m'en être conscient. Process Explorer est vraiment utile.
Typique question facile difficile à repérer.
OriginalL'auteur jbernal