【转】“正由另一进程使用,因此该进程无法访问该文件”的问题&解决方法
2014-06-10 12:43
841 查看
正在写一个手指画图的程序
C# + WPF
其中有一部分是加载外部某PNG文件,放入BitmapImage,再作为Image的Source显示在Canvas上
画了几笔之后,再存回这个PNG文件
================问题=================
BitmapImage这个对象没有Dispose方法,始终无法释放,因此在之后FileStream试图写这个文件时出现“正由另一进程使用,因此该进程无法访问该文件”的问题
尝试了很多方法,包括在using FileStream之前加lock、在new FileStream的参数中加入FileAccess.ReadWrite、FileShare.ReadWrite、以及将bitmap.Clone作为currentImage的Source,都不成功
===============解决方法=============
最后发现初始化BitmapImage可以通过byte[]进行,于是只能通过将png文件读成byte[],再进行BitmapImage的初始化,就没有问题了
为了更加保险,最后使用的方法中通过ref参数,将需要init的bitmap作为参数传入,方法内部生成一个temp的BitmapImage,完成Init后,bitmap = temp.Clone()
C# + WPF
其中有一部分是加载外部某PNG文件,放入BitmapImage,再作为Image的Source显示在Canvas上
画了几笔之后,再存回这个PNG文件
================问题=================
BitmapImage这个对象没有Dispose方法,始终无法释放,因此在之后FileStream试图写这个文件时出现“正由另一进程使用,因此该进程无法访问该文件”的问题
BitmapImage bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.UriSource = new Uri(filePath); bitmap.EndInit(); Image currentImage .Source = bitmap; canvas.Children.Add(currentImage); // Do some modification private void ExportToPng( string path, Canvas surface) { if(path == null) return; ........ using(FileStream outStream = new FileStream(path, FileMode.Create) ........ }
尝试了很多方法,包括在using FileStream之前加lock、在new FileStream的参数中加入FileAccess.ReadWrite、FileShare.ReadWrite、以及将bitmap.Clone作为currentImage的Source,都不成功
===============解决方法=============
最后发现初始化BitmapImage可以通过byte[]进行,于是只能通过将png文件读成byte[],再进行BitmapImage的初始化,就没有问题了
// Read byte[] from png file BinaryReader binReader = new BinaryReader(File.Open(filePath, FileMode.Open)); FileInfo fileInfo = new FileInfor(filePath); byte[] bytes = binReader.ReadBytes((int)fileInfo.Length); binReader.Close(); // Init bitmap BitmapImage bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.StreamSource = new MemoryStream(bytes); bitmap.EndInit();
为了更加保险,最后使用的方法中通过ref参数,将需要init的bitmap作为参数传入,方法内部生成一个temp的BitmapImage,完成Init后,bitmap = temp.Clone()
相关文章推荐
- c# 读取其他程序正打开的文件的时“正由另一进程使用,因此该进程无法访问该文件。"的问题解决方法
- 用流的方法解决“文件正由另一进程使用,因此该进程无法访问该文件” 的问题 FileStream
- 多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
- 对于image.fromfile方法在使用时,遇到的“正由另一进程使用,因此该进程无法访问此文件”解决方法
- 多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
- Image.FromFile方法会锁住文件的解决方法(文件正由另一进程使用,因此该进程无法访问该文件)
- 多线程写文件异常(正由另一进程使用,因此该进程无法访问该文件)的解决方法
- C#中文件正由另一进程使用,因此该进程无法访问该文件解决方法
- 关于IIS服务启动失败的问题:“IIS提示‘另一个程序正在使用此文件,进程无法访问’”,的解决方法
- Image.FromFile方法会锁住文件的解决方法(文件正由另一进程使用,因此该进程无法访问该文件)
- win7 IIS7 "另一个程序正在使用此文件,进程无法访问" 解决方法
- FileShare文件读写锁解决“文件XXX正由另一进程使用,因此该进程无法访问此文件”(转)
- 请求帮助:如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?
- C#程序提示“正由另一进程使用,因此该进程无法访问该文件”的解决办法
- FileStram文件正由另一进程使用,该进程无法访问该文件,解决方法
- 正由另一进程使用,因此该进程无法访问该文件-----解决办法总结
- windows2003 IIS 服务启动失败,提示‘另一个程序正在使用此文件,进程无法访问',解决方法
- “另一个程序正在使用此文件,进程无法访问”的解决方法
- VS 编译提示 无法将“obj\Debug\*.*”复制到“bin\Debug\*.*”,文件...正在由另一个进程使用,因此该进程无法访问此文件 解决办法
- “正由另一进程使用,因此该进程无法访问该文件”的解决办法