Fichier C#.Supprimer un fichier utilisé par un autre processus
J'ai un problème lorsque j'essaie de supprimer un fichier image.
J'ai toujours une erreur qui dit: IOExeption était non gérée. Acces refusé car le fichier est beining utilisé par un autre processus.
Je ne sais pas ce qui pourrait être et comment le résoudre.
private void comboBox3_SelectedIndexChanged(object sender, EventArgs e) { Album album = GetAlbum(comboBox1.SelectedIndex); Photo Photo = GetPhoto(comboBox1.SelectedIndex, comboBox3.SelectedIndex); txtPhotoPath.Texte = Répertoire.GetCurrentDirectory() + "\\" + photo.SPath; lblExtention.Texte = photo.SExtention; txtPhotoTitle.Texte = photo.STitle; pctrbFoto.Image = Image.FromFile(foto.SPath).GetThumbnailImage(GetWitdth(photo.SPath, GetHeight(photo.SPath, 150)), GetfHeight(photo.SPath, 150), null, new IntPtr()); } private void btnChangePhoto_Click(object sender, EventArgs e) { Album album = GetAlbum(comboBox1.SelectedIndex); Photo Photo = GetPhoto(comboBox1.SelectedIndex, comboBox3.SelectedIndex); Fichier.Supprimer("Albums\\Images\\" + photo.STitle + foto.SExtention); photo.SExtention = lblExtention.Texte; photo.STitle = txtPhotoTitel.Texte; Photo.SPath = txtPath.Texte; Fichier.Copie(photo.SPath, "Albums\\Images\\" + photo.STitle + photo.SExtention); }
Grâce,
Vinzcent
Merci à tous pour l'aide.
Je l'utilise et il fonctionne très bien maintenant
votre processus est celui qui utilise le fichier , vous devez régler l'image pour null utiliser quelque chose comme ceci :
var img = Image.FromFile(foto.SPath).GetThumbnailImage(GetWitdth(photo.SPath,
GetHeight(photo.SPath, 150)), GetfHeight(photo.SPath, 150), null, new IntPtr());
pctrbFoto.Image = img;
img = null;
GC.Collect();
Vous devez vous connecter pour publier un commentaire.
votre processus est celui qui utilise le fichier , vous devez définir l'image à null
utiliser quelque chose comme ceci :
Le premier quartier je chercherais est en votre GetPhoto méthode. Avez-vous un StreamReader qui n'a pas été fermé? Assurez-vous que si vous êtes en train de faire toute sorte d'I/O sur le fichier avant de le supprimer, que vous fermez ces connexions en premier. Ce qui ne l'GetPhoto() la méthode de le faire?
où vous êtes l'obtention de la vignette utilisation:
au lieu de s'assurer que la source de l'image est éliminé (fermé) lorsque vous avez terminé avec elle.
La façon que vous l'avez, l'image qui en est chargé à partir du fichier des bâtons jusqu'à ce que le garbage collector décide de le libérer, ce qui pourrait être un certain temps.
Images chargées avec FromFile maintenez sur le fichier qu'ils ont été chargés de l'ouvrir.
Vous devez d'abord déterminer si c'est votre application ou une autre application qui a ouvert le fichier.
Vous pouvez utiliser l'Explorateur de Processus par Mark Russinovich pour voir quel programme a un fichier ou un répertoire ouvert. Il fait partie de la Windows Sysinternals ligne d'excellente utilitaires que chaque programmeur/professionnel de l'informatique à utiliser (ou au moins être au courant).
Vous pouvez l'obtenir ici: http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
Lorsque vous appelez
Image.FromFile
danscomboBox3_SelectedIndexChanged
, et peut-être ailleurs aussi, vous ne jetez pas à laImage
objet. Par conséquent, votre programme est de garder le fichier en cours d'utilisation.Vous devez Disposer de l'image à chaque fois que vous l'ouvrez.
Quand tout le reste échoue, vous pouvez utiliser MoveFileEx pour supprimer le fichier sur le prochain redémarrage.
vous pouvez utiliser le programme Unlocker pour vous raconter ce programme(s) ont verrouillé le fichier
Remarque: Supprimé le lien pour Unlocker programme - contient des logiciels malveillants.
...mais, si votre application est en cours d'exécution sur un plan d'hébergement web? Vous ne pouvez pas exécuter n'importe quel logiciel dans un serveur partagé.
J'ai essayé avec dispose() et d'autres options, mais je ne peux pas supprimer les fichiers comme Vinzcent.
Maldito IIS :@
Une fois, j'ai utilisé quelque chose comme thestar et Sadegh posté
mais pour certains cas, il n'a pas de travail/aidé donc j'ai trouvé une autre solution
J'ai déjà postet ici
encore ici le code (u peut mieux le comprendre après avoir vu le lien et la question):
Vous pouvez également supprimer le (nouveau) l'image instantanément ! (si vous voulez)