2013-05-09 125 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