Ich habe so viele verschiedene Möglichkeiten versucht, dies zu tun, und es sagt mir immer noch, die Datei wird verwendet, wenn ich versuche, es zu löschen, bevor Sie es erneut speichern.kann Datei nicht speichern, weil sie verwendet wird
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();
}
}
Wie Sie sehen können, habe ich alles in einem "using" -Block. Ich "schließe" auch die Datei und versuchte sogar explizit, "dispose" aufzurufen. Aber wenn ich den Code erneut ausführe, sagt mir STILL, dass die Datei verwendet wird. Was kann ich tun, um die Datei überschreiben zu können?
Ich habe versucht, es auch so:
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;
}
}
und es gibt mir immer noch den gleichen Fehler.
Haben Sie dies später hinzugefügt, nachdem Sie versucht haben, Ihr Programm zu schließen, ohne den Stream zu löschen? Es ist möglich, dass der alte Stream um Ihren Computer "herumschwebt" und die Datei blockiert. Sie können ihn jetzt nicht mehr schließen, weil Sie keinen Zugriff darauf haben. Sie könnten versuchen, Ihren Computer neu zu starten, dann sollte dieses Problem gelöst werden (wenn dies das Problem ist). – Lehue
Es könnte andere Möglichkeiten geben, einen verlorenen Filestream zu töten, aber ich kenne keine (ehrlich gesagt habe ich auch nie danach gesucht). – Lehue
Es gibt wahrscheinlich einen Grund dafür. Gibt es noch etwas, das die von Ihnen erstellte Datei/den erstellten Dateipfad nutzt? Vielleicht wird der Dateipfad an etwas zurückgegeben, das etwas damit macht und es sperrt oder einen Stream nicht bereinigt? Höchstwahrscheinlich ist es nicht in dem Code, den Sie uns gezeigt haben, soweit es einen Verwendungsblock um Ihren FileStream gibt. Ich wette, wenn Sie dies in eine Schleife setzen würde es auch gelingen (vorausgesetzt, die Datei ist nicht gesperrt, wenn Sie eingeben). – Igor