如何将图像文件保存在项目文件夹中?

Ami*_*mar 2 c# openfiledialog picturebox winforms

在我的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();
}
Run Code Online (Sandbox Code Playgroud)

它无法将图像保存在"proImg"文件夹中.

在此输入图像描述

Sal*_*rsa 9

实际上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();
}
Run Code Online (Sandbox Code Playgroud)


har*_*r07 6

您应该提供正确的目标路径到File.Copy方法."〜\ ProImages ......"不是正确的道路.此示例将所选图片复制到项目bin文件夹中的ProImages文件夹:

string iName = opFile.FileName;
File.Copy(iName, Path.Combine(@"ProImages\", Path.GetFileName(iName)));
Run Code Online (Sandbox Code Playgroud)

路径相对于当前可执行文件的位置,除了您提供完整路径(即@"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);
Run Code Online (Sandbox Code Playgroud)

PS:注意使用verbatim(@)来自动转义\字符串中的反斜杠()字符.通常的做法是在声明表示路径的字符串时使用逐字.