代码之家  ›  专栏  ›  技术社区  ›  Pim Jager

.NET应用程序锁定文件

  •  0
  • Pim Jager  · 技术社区  · 15 年前

    好吧,我对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")
    

    最后一行将抛出一个异常,表示img1正在使用中,因此无法移动。所以我的应用程序仍在使用它,但是如何使我的应用程序停止锁定文件?没有什么可以作为参考(据我所见)

    2 回复  |  直到 15 年前
        1
  •  6
  •   itowlson    15 年前

    有罪的一方就是位图。这个 Bitmap(string) 构造函数确实会导致位图在释放位图之前对文件持有锁。见 remarks in the docs :

    在释放位图之前,文件将保持锁定状态。

    要解决此问题,请处置位图(如果已完成该操作),或者手动将文件中的字节从文件加载到memorystream,然后从memorystream加载位图。(再一次, Bitmap(Stream) 构造器要求流保持打开状态,因此您不能只通过文件创建一个文件流;您需要将字节加载到内存中,并在完成位图之前保留内存流。)

        2
  •  3
  •   Gabriel Magana    15 年前

    这是因为GDI+。请在此处查找解决方案和解释: http://gabrielmagana.com/2009/05/c-working-with-images-image-files-and-pictureboxes/