2015-12-14 102 views
1

我想從我的資源文件中加載一堆圖像,但出於某種原因我得到FileNotFoundException。圖像名稱是這樣的: 「image01.png」,「image02.png」,...,「image10.png」,image11.png「C#:FileNotFoundException當從資源加載圖像

最後,我希望能夠顯示所有在屏幕上的圖像

以下是我有:

String imgName; 
     int row = 0, col = 0; 

     for (int i = 1; i <= 15; i++) 
     { 
      //get the name of the current image 
      if (i < 10) 
       imgName = "image0" + i + ".png"; 
      else 
       imgName = "image" + i + ".png"; 

      Image img = null; 
      try { 
       img = Image.FromFile(imgName);//read the image from the resource file 
      } 
       catch (Exception e) { Console.WriteLine("ERROR!!!" + e); } 
} 

下面是一個簡單的錯誤輸出,我越來越:

ERROR!!!System.IO.FileNotFoundException: tile01.png 
    at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement) 
    at System.Drawing.Image.FromFile(String filename) 

截圖: updated code

我也修復了第56行的一個類型:「PictureForm.PuzzleForm。」到「PicturePuzzle」,但仍然沒有運氣。

+0

什麼是您的「資源文件」,它存儲在哪裏以及您的代碼與該資源文件相關的執行位置? –

+2

嵌入式資源文件內置到輸出組件中。在這段代碼中,你認爲你是在告訴計算機在程序集中尋找文件?您似乎試圖從文件系統加載它們。 – adv12

+0

@ adv12:它看起來並不像他試圖加載嵌入式資源,而是從磁盤加載.png文件。 –

回答

3

您未指定從中加載文件的路徑。它們將從程序集的運行位置加載。

請注意,Image.FromFile不會加載嵌入式資源,而是加載磁盤中的.png。我認爲這是你的意圖。

檢查Visual Studio中圖像的屬性,並確保複製到輸出目錄是複製如果是較新或始終複製。這裏有一個截圖(在我的情況下,它是一個遊標資源,但對圖像的想法相同)。

enter image description here

UPDATE

如果你已經在你的EXE或其他文件嵌入您的圖片,你可以使用類似的代碼

System.Reflection.Assembly thisExe; 
thisExe = System.Reflection.Assembly.GetExecutingAssembly(); 
System.IO.Stream file = 
    thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg"); 
this.pictureBox1.Image = Image.FromStream(file); 

Source

您可以通過將屬性Build Action設置爲Embedded Resource將您的圖像嵌入到二進制文件(通常是.exe)中,或者通過將Build Action設置爲Content將其保留爲單獨文件。如果您作爲內容離開,請將複製到輸出目錄設置爲True。

+0

忽略我之前的評論 - 我可以從你對OP的評論中看到,你正在解釋他的帖子,以表明他*希望*文件在本地。道歉。 –

+0

@BrianWarshaw:我更新了我的答案,以說明兩種可能性。 –

+0

謝謝,我試過這樣做,但我得到最後一行的錯誤。錯誤是:「...不包含'picturebox1'的定義,並且'picturebox1'沒有接受第一個參數類型的MyProject.MyClass'的擴展方法' –

0

代碼中沒有什麼可以說明文件位於何處,因此它缺省的文件不在其中。如果這些文件與您的exe文件位於相同的位置,那麼嘗試一下像 imgNmae =「./image0」+ i +「.png」;

調整相對路徑以考慮文件實際位置。

+0

爲什麼downvote?它回答了提出的問題...... –

+0

如果他的文件與他的.exe文件位於同一位置,那麼不需要添加路徑的「./」部分。它已經在那裏看。 –