2013-05-09 83 views
0

我可以无限地保存文件。我可以无限打开我的文件。我可以保存然后打开我的文件。打开后无法保存文件

但是打开后我无法保存我的文件。我得到以下错误:

型“System.Runtime.InteropServices.ExternalException”的第一次机会异常出现在System.Drawing.dll程序

附加信息:GDI +中发生一般性错误。

我试过处置和临时位图,但这似乎并不适用于我。文件正在打开和保存的位置也是相同的地方,所以也许问题可能是覆盖文件?我的程序总是打破在temp.save

private void openToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      //Graphics.FromImage(bmap).Dispose(); 
      using (Graphics g = Graphics.FromImage(bmap)) 
      { 

       bmap = new Bitmap(@"C:\Users\Nick\final.bmp"); 
       g.DrawImage(bmap, panel1.Width, panel1.Height); 
      } 
      panel1.Invalidate(); 
     } 
private void saveToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      Graphics g = Graphics.FromImage(bmap); 
      temp =new Bitmap(bmap); 
      //Graphics.FromImage(bmap).Dispose(); 
      try 
      { 
       g.Dispose();   
       temp.Save(@"C:\Users\Nick\final.bmp", ImageFormat.Bmp); 
      } 
      catch (UnauthorizedAccessException ex) 
      { 
       Console.WriteLine(ex.Message); ; 
      } 
      catch (System.Runtime.InteropServices.ExternalException ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 

     } 
+0

是'bmap'的私人领域? – 2013-05-09 17:10:16

+0

没有。 '位图bmap =新的位图'。虽然我只是测试过,但我仍然得到错误,无论是公共还是私人。 – krikara 2013-05-09 17:12:36

回答

1

不能覆盖该文件,因为当你使用new Bitmap(path)该文件将加载到内存中,并保持打开状态,直到你用它做,你可以如果文件当前打开,则覆盖文件。

编辑

这里是你如何从一个内存流加载图像:

// make sure you don't dispose of this until you're done with it 
var memoryStream = new MemoryStream(File.ReadAllBytes(path)); 
Image img = Image.FromStream(memoryStream); 
+0

我想关闭这个文件,然后删除它,但我无法弄清楚关闭它的方法。我不能只删除它。 – krikara 2013-05-09 18:07:55

+0

您是否尝试过从内存流中加载文件,然后将其删除? – 2013-05-09 18:12:47

+0

还没有。让我看看这个。 – krikara 2013-05-09 18:13:08