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表示流必须在映像的生命周期内保持打开状态.(例外情况包括"可能无法读取已关闭文件"或类似信息.)
如何从文件加载图像,然后没有对文件的进一步引用?
很抱歉回答我自己的问题,但我认为这对我自己来说太有用了.
诀窍是在将数据加载到图像之前将数据从文件流复制到内存流中.然后可以安全地关闭文件流.
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)