如何在不保持文件锁定的情况下从文件加载图像?

Rob*_*obH 4 .net graphics winforms

我希望在PictureBox中显示图像,从文件加载图像.但是文件会被定期覆盖,所以我无法保持文件锁定状态.我开始这样做:

pictureBox.Image = Image.FromFile( fileName );

但是,这会使文件锁定.然后我尝试通读一个流:

using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
    pictureBox.Image = Image.FromStream(fs);
} 
Run Code Online (Sandbox Code Playgroud)

这不会锁定文件,但导致稍后抛出异常; MSDN表示流必须在映像的生命周期内保持打开状态.(例外情况包括"可能无法读取已关闭文件"或类似信息.)

如何从文件加载图像,然后没有对文件的进一步引用?

Rob*_*obH 9

很抱歉回答我自己的问题,但我认为这对我自己来说太有用了.

诀窍是在将数据加载到图像之前将数据从文件流复制到内存流中.然后可以安全地关闭文件流.

using (System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    fs.CopyTo(ms);
    ms.Seek(0, System.IO.SeekOrigin.Begin);
    pictureBox.Image = Image.FromStream(ms);
} 
Run Code Online (Sandbox Code Playgroud)