2013-09-10 75 views
0

C#/ .NET 3.5,WindowsForms。IO異常 - 由另一個進程使用的文件

我有一個從文件顯示的圖像此Windows窗體,每當用戶保存執行該代碼的記錄:在每個Catch語句

    string oldLoc = itemsBO.ImageLoc; 
        if (oldLoc != SystemSettings.NoImageLocation) 
        { 
         if (File.Exists(oldLoc)) 
         { 
          try { File.Delete(oldLoc); } 
          catch (IOException ex) 
          { 
           MessageBox.Show("1 - " + ex.GetType().ToString() + " " + ex.Message); 
          } 
         } 
        } 

        string saveLoc = itemsBO.ImageSearchLoc + ".jpg"; 
        if (File.Exists(saveLoc)) 
        { 
         try { File.Delete(saveLoc); } 
         catch (IOException ex) 
         { 
          MessageBox.Show("2 - " + ex.GetType().ToString() + " " + ex.Message); 
         } 
        } 

        try 
        { 
         if (pictureBox2.Image != null) 
          pictureBox2.Image.Save(saveLoc, System.Drawing.Imaging.ImageFormat.Jpeg); 
        } 
        catch (IOException ex) 
        { 
         MessageBox.Show("3 - " + ex.GetType().ToString() + " " + ex.Message); 
        } 

漠視窮人MessageBox的消息,但它的錯誤了。它不能刪除「現有」圖像,因爲它表示它正在被另一個進程使用。無法保存,因爲文件存在於相同的路徑中,因爲它不會被刪除。

這是當他們嘗試添加新圖片時設置圖像的代碼;

  Image clipImage = Clipboard.GetImage(); 

      if (tabControl2.SelectedTab == tabPage5) 
      { 
       pictureBox1.Image = clipImage; 
       itemsBO.IsDirtyImage = true; 
      } 
      else if (tabControl2.SelectedTab == tabPage6) 
      { 
       pictureBox2.Image = clipImage; 
       itemsBO.IsDirtyImage2 = true; 
      } 

然後,當形式負載高達與圖像現有的記錄,這是用於獲取代碼/顯示它:

  byte[] bits = File.ReadAllBytes(imgfil); 
      msImage = new MemoryStream(bits, 0, bits.Length); 

      if (tabControl2.SelectedTab == tabPage5) 
       pictureBox1.Image = Image.FromStream(msImage); 
      else if (tabControl2.SelectedTab == tabPage6) 
       pictureBox2.Image = Image.FromStream(msImage); 

imgfil是一個路徑圖像,當然。

完全不知道從哪裏開始...

+0

您是否在您的代碼某處讀取此位置處的文件itemsBO.ImageLoc? – Gaurav

+0

ImageLoc是該文件的路徑,是的 – user1096207

+0

我的意思是您正在加載文件在這個位置itemsBO.ImageLoc到你的應用程序?如果是的話,你是如何加載的 – Gaurav

回答

0

我已經從文件顯示的圖像,而這個Windows窗體每當用戶保存記錄

如果你還在顯示保存文件時的圖像,如果我沒有弄錯,應用程序仍然會訪問該文件。先嚐試處理文件,可能是通過將圖片框(或用於顯示圖像的任何圖像)設置爲空,或者在執行操作之前加載空白圖片。

+0

試圖改變它將投影箱的圖像投入臨時圖像對象,然後將圖片框設置爲null,所以我可以保存臨時文件而不是圖片框,但是會得到相同的結果:( – user1096207

+0

@ user1096207正在使用File.ReadAllBytes(imgfil)方法加載圖像。此方法打開文件,將文件內容讀入字節數組,然後關閉文件,所以情況並非如此。 – Gaurav

0

於是我繼承了從另一個用戶該應用程序,原來的pictureBoxes是具有自己的形象代碼獨立的代碼,在原來的職位,第三塊的另一大塊集。正因爲如此,IOException發生了:(

相關問題