2014-01-29 107 views
1

在我的Windows應用程序中,我有一個PictureBox和一個Button控件。我想從按鈕的OnClick事件中加載來自用戶的圖像文件,並將該圖像文件保存在我的項目中的文件夾名稱「proImg」中。然後我想在PictureBox中顯示該圖片。如何將圖像文件保存在我的項目文件夾中?

我寫了這個代碼,但它不工作:

OpenFileDialog opFile = new OpenFileDialog(); 
opFile.Title = "Select a Image"; 
opFile.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*"; 
if (opFile.ShowDialog() == DialogResult.OK) 
{ 
    try 
    { 
     string iName = opFile.FileName; 
     string filepath = "~/images/" + opFile.FileName; 
     File.Copy(iName,Path.Combine("~\\ProImages\\", Path.GetFileName(iName))); 
     picProduct.Image = new Bitmap(opFile.OpenFile()); 
    } 
    catch (Exception exp) 
    { 
     MessageBox.Show("Unable to open file " + exp.Message); 
    } 
} 
else 
{ 
    opFile.Dispose(); 
} 

它無法將圖像保存在「proImg」文件夾中。

enter image description here

+0

什麼不工作? – meilke

+0

無法保存該文件夾中的圖像。我可以做到這一點 –

回答

6

其實string iName = opFile.FileName;沒有給你完整的路徑。您必須改用SafeFileName。我假設你還想在exe目錄中找到你的文件夾。請參考我的修改:

OpenFileDialog opFile = new OpenFileDialog(); 
opFile.Title = "Select a Image"; 
opFile.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*"; 

string appPath = Path.GetDirectoryName(Application.ExecutablePath) + @"\ProImages\"; // <--- 
if (Directory.Exists(appPath) == false)            // <--- 
{                     // <--- 
    Directory.CreateDirectory(appPath);            // <--- 
}                     // <--- 

if (opFile.ShowDialog() == DialogResult.OK) 
{ 
    try 
    { 
     string iName = opFile.SafeFileName; // <--- 
     string filepath = opFile.FileName; // <--- 
     File.Copy(filepath, appPath + iName); // <--- 
     picProduct.Image = new Bitmap(opFile.OpenFile()); 
    } 
    catch (Exception exp) 
    { 
     MessageBox.Show("Unable to open file " + exp.Message); 
    } 
} 
else 
{ 
    opFile.Dispose(); 
} 
+0

運行後,請檢查您的/ bin文件夾以查看結果。 –

+0

但圖像不在我的ProImages文件夾中。它在bin/ProImages文件夾中。 –

+0

它將到/ bin/Debug文件夾中的PRoImages文件夾(可執行文件目錄) –

5

你應該提供一個正確的目標路徑File.Copy方法。 「〜\ ProImages ...」不是正確的路徑。這個例子將複製所選的圖片文件夾中的項目的bin文件夾內ProImages:

string iName = opFile.FileName; 
File.Copy(iName, Path.Combine(@"ProImages\", Path.GetFileName(iName))); 

的路徑是相對於當前的可執行文件的位置,除非你提供完整的路徑(即@「d:\ ProImages」)。

如果你沒有手動創建的文件夾,並希望該計劃產生ProImages文件夾,如果不存在,就:

string iName = opFile.FileName; 
string folder = @"ProImages\"; 
var path = Path.Combine(folder, Path.GetFileName(iName)) 
if (!Directory.Exists(folder)) 
{ 
    Directory.CreateDirectory(folder); 
} 
File.Copy(iName, path); 

PS:注意使用verbatim@)來自動逃跑反斜槓(\)字符串。當聲明表示路徑的字符串時,通常會逐字使用。

+0

仍然是相同類型的異常。 –

+0

'File.Copy'假設文件夾已經存在。如果不是,則需要先創建文件夾。是這種情況,'ProImages'文件夾還沒有被創建? – har07

2

嘗試使用picturebox.Image.Save函數。在我的程序,它正在 PictureBox.Image.Save(你的目錄,ImageFormat.Jpeg)

例如 pictureBox2.Image.Save(@ 「d:/ CameraImge /」 +文件夾名+ 「/」 +編號+」。 jpg「,ImageFormat.Jpeg);

+0

using System.Drawing.Imaging; –

1

你可以這樣寫代碼。

string appPath = Path.GetDirectoryName(Application.ExecutablePath)+ foldername;圖片框1.Image.Save(appPath + @「\」+文件名+「.jpg」,ImageFormat.Jpeg);

相關問題