J'ai essayé de nombreuses façons de procéder, et il me dit toujours que le fichier est en cours d'utilisation lorsque j'essaie de le supprimer avant de le sauvegarder de nouveau.Impossible d'enregistrer le fichier car il est en cours d'utilisation
if (Clipboard.GetDataObject().GetData(DataFormats.Bitmap) != null)
{
if (File.Exists(filename)) { File.Delete(filename); }
using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
{
ImageConverter converter = new ImageConverter();
byte[] bytes = (byte[])converter.ConvertTo(Clipboard.GetDataObject().GetData(DataFormats.Bitmap), typeof(byte[]));
fs.Write(bytes, 0, bytes.Length);
fs.Close();
fs.Dispose();
}
}
Comme vous pouvez le voir, j'ai tout dans un bloc "using". J'ai également "fermé" le fichier, et j'ai même essayé d'appeler explicitement le "disposer". Mais quand je réexécute le code, il me dit toujours que le fichier est en cours d'utilisation. Que puis-je faire pour pouvoir écraser le fichier?
J'ai aussi essayé de cette façon:
using (Bitmap bmp = new Bitmap((Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap)))
{
if (bmp != null)
{
if (File.Exists(filename)) { File.Delete(filename); }
using (MemoryStream memory = new MemoryStream())
{
using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
{
bmp.Save(memory, ImageFormat.Bmp);
byte[] bytes = memory.ToArray();
fs.Write(bytes, 0, bytes.Length);
fs.Close();
}
memory.Dispose();
}
bmp.Dispose();
break;
}
}
et il me donne toujours la même erreur.
Avez-vous ajouté cela plus tard, après avoir essayé de fermer votre programme sans supprimer le flux? Il est possible que l'ancien flux "flotte" autour de votre ordinateur et bloque le fichier et maintenant vous ne pouvez plus le fermer parce que vous n'y avez pas accès. Vous pourriez essayer de redémarrer votre ordinateur, alors ce problème devrait être résolu (si c'est le problème). – Lehue
Il pourrait y avoir d'autres façons de tuer un flux de fichiers perdu, mais je n'en connais pas (honnêtement, je ne les ai jamais cherché non plus). – Lehue
Il y a probablement une raison à cela. Y at-il autre chose qui utilise le fichier/chemin de fichier que vous avez créé? Peut-être que le chemin du fichier est retourné à quelque chose qui fait quelque chose avec lui et le verrouille ou ne nettoie pas un flux? Très probablement ce n'est pas dans le code que vous nous avez montré jusqu'à présent qu'il y a un bloc qui utilise autour de votre FileStream. Je suis prêt à parier que si vous mettez cela dans une boucle, il réussira également (en supposant que le fichier n'est pas verrouillé lorsque vous entrez). – Igor