.NET应用程序锁定文件

Pim*_*ger 0 .net vb.net file-io locking

好吧,我是VB.NET和桌面应用程序开发的新手.简化这是我的应用程序中发生的事情:

Dim Files() As New List(Of IO.FileInfo)
Files.Add( (New IO.FileInfo("C:\img1.jpg")) )
Files.Add( (New IO.FileInfo("C:\img2.jpg")) )
'Picture is a Windows.Forms.PictureBox in my WinForm '
Picture.Image = New System.Drawing.Bitmap(Files(0).FullName)
Picture.image = Nothing
CurrentFile = Files(0)
'Show next pic (img2)'
Files.RemoveAt(0)
Picture.Image = New System.Drawing.Bitmap(Files(0).FullName)
'Move img1 to other location '
CurrentFile.MoveTo("C:\other\img1.jpg")
Run Code Online (Sandbox Code Playgroud)

最后一行将抛出一个异常,说img1因为正在使用而无法移动.所以我的应用程序仍在使用它,但如何让我的应用程序停止锁定文件?没有什么可以保持它(据我所见)

ito*_*son 6

有罪的一方是Bitmap.的Bitmap(string)构造确实导致位图在文件上的锁,直到位图被设置.请参阅文档中备注:

文件保持锁定状态,直到处理掉位图.

要解决此问题,请先处理Bitmap(如果已完成),或者手动将文件中的字节从文件加载到MemoryStream中,然后从MemoryStream中加载Bitmap.(同样,Bitmap(Stream)构造函数要求Stream保持打开状态,因此您无法在文件上创建FileStream;您需要将字节加载到内存中,并保持MemoryStream,直到您完成Bitmap. )