删除其他进程正在使用的文件

时间:2012-11-07 03:01:10

标签: c# wpf file process delete-file

我正在尝试以编程方式删除文件,但该文件显然正被另一个进程使用(恰好是我的程序)。基本上,程序通过使用FromUri来创建一个Bitmap来加载一个文件夹中的图像,然后将其加载到一个Image数组中,该数组又成为一个stackpanel的子项。不是很有效,但它确实有效。

我已经尝试清除stackpanel的子节点,并使数组中的图像为null,但我仍然收到IOException,告诉我该文件正由另一个进程使用。

是否有其他方法可以从我的应用程序进程中删除该文件?

5 个答案:

答案 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=OneWayGC.Collect(),然后调用File.Delete(path)并最终工作。

答案 4 :(得分:-1)

我有同样的问题。我遇到的问题是openFileDialog和saveFileDialog有以下集合:

MyDialog.AutoUpgradeEnabled = false;

我注释掉了那条线并且它已经解决了。