我正在尝试以编程方式删除文件,但该文件显然正被另一个进程使用(恰好是我的程序)。基本上,程序通过使用FromUri来创建一个Bitmap来加载一个文件夹中的图像,然后将其加载到一个Image数组中,该数组又成为一个stackpanel的子项。不是很有效,但它确实有效。
我已经尝试清除stackpanel的子节点,并使数组中的图像为null,但我仍然收到IOException,告诉我该文件正由另一个进程使用。
是否有其他方法可以从我的应用程序进程中删除该文件?
答案 0 :(得分:89)
可能是垃圾收集问题。
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
File.Delete(picturePath);
答案 1 :(得分:6)
另一种方法是删除文件。使用FileStream类加载文件并释放文件 通过stream.Dispose(); 它永远不会给你异常“进程无法访问文件”,因为它正被另一个进程使用。“
using (FileStream stream = new FileStream("test.jpg", FileMode.Open, FileAccess.Read))
{
pictureBox1.Image = Image.FromStream(stream);
stream.Dispose();
}
// delete your file.
File.Delete(delpath);
答案 2 :(得分:2)
var uploadedFile = Request.Files[0]; //Get file
var fileName = Path.GetFileName(uploadedFile.FileName); //get file name
string fileSavePath = Server.MapPath(fileName); //get path
uploadedFile.SaveAs(fileSavePath); //saving file
FileInfo info = new FileInfo(fileSavePath);//get info file
//the problem ocurred because this,
FileStream s = new FileStream(fileSavePath, FileMode.Open); //openning stream, them file in use by a process
System.IO.File.Delete(fileSavePath); //Generete a error
//problem solved here...
s.Close();
s.Dispose();
System.IO.File.Delete(fileSavePath); //File deletad sucessfully!
答案 3 :(得分:-1)
我有类似的问题。唯一的区别是我使用Binding(MVVM Pattern)。没有什么可行的,然后我删除了所有内容并尝试使用绑定Mode=OneWay
和GC.Collect()
,然后调用File.Delete(path)
并最终工作。
答案 4 :(得分:-1)
我有同样的问题。我遇到的问题是openFileDialog和saveFileDialog有以下集合:
MyDialog.AutoUpgradeEnabled = false;
我注释掉了那条线并且它已经解决了。