“进程无法访问该文件,因为它正被另一个进程使用”错误

时间:2013-08-20 13:24:32

标签: c# bitmap webcam ioexception

编辑: 我终于找到了错误。它与位图或流或静态完全无关。看来我的一位同事忘记在发送邮件后删除电子邮件附件,并且邮件附件服务保持打开状态。我在整个邮件发送过程中使用了一个using语句,并且它已经解决了。谢谢大家。

我知道你可能会说有数十亿个具有相同标题的主题并且这是重复的,但请相信我不是。我一直在寻找解决方案,比如7个小时,但到目前为止没有任何帮助。

问题如下:这是一个使用WebcamSource作为网络摄像头的照片捕获应用程序。在拍摄第一张照片并通过电子邮件发送给用户时,应用程序运行良好但是,当用户重新返回进程(在第一次运行之前启动)时,应用程序会出现这样的错误。错误的代码如下。

public static void SaveImageCapture(BitmapSource bitmap)
        {

                JpegBitmapEncoder encoder = new JpegBitmapEncoder();
         //     bitmap = BitmapFrame.Create(BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
                encoder.Frames.Add(BitmapFrame.Create(bitmap));
                encoder.QualityLevel = 100;
                encoder.Rotation = Rotation.Rotate270;
                try
                {
                    using (FileStream fstream = new FileStream("Photos\\" + fileName + ".jpg", FileMode.Create))
                    {
                        encoder.Save(fstream);
                        fstream.Close();

                    }
                }
                catch (Exception e) {
                    System.Windows.Forms.MessageBox.Show(e.ToString());
                }

        }

代码在FileStream fstream = new FileStream("Photos\\" + fileName + ".jpg", FileMode.Create)崩溃并且出现错误

  

该进程无法访问文件“C:\ Users [username] \ Dropbox [projectname] [projectname] \ bin \ Debug \ Photos”,因为它正由另一个进程使用。

我尝试关闭网络摄像头流,用try / catch包围代码,将其放入using语句,添加FileAccess和FileShare字段,尝试添加BitmapCreateOptions.NoneBitmapCacheOption.OnLoad(它不允许我) ,创建具有不同名称的新图像而不是覆盖相同的图像,在发送电子邮件后删除图像(它给了我相同的错误),以及一些可能导致文件访问问题的小安排。

2 个答案:

答案 0 :(得分:0)

我建议将文件名更通用,以便附加时间戳或其他内容,但另外,using之前fstream.Flush()调用fstream.Close()

答案 1 :(得分:0)

在到达此点之前,您是否在代码中的任何其他位置引用了该文件位置(主要是Photos文件夹)?

您似乎已经在代码中的其他地方访问了它,并且与它的连接尚未关闭 - 只要调用IO方法,就可以方便地使用Using块。

虽然不理想,但请尝试在GC.Collect()

之后致电encoder.Rotation = Rotation.Rotate270;