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

问题描述 投票:0回答:5

在我的 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

c# winforms picturebox openfiledialog
5个回答
13
投票

实际上

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();
}

6
投票

您应该为

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 (

@
) 自动转义字符串中的反斜杠 (
\
) 字符。在声明表示路径的字符串时逐字使用是常见的做法。


2
投票

尝试使用 picturebox.Image.Save 函数。在我的程序中它正在工作 PictureBox.Image.Save(您的目录,ImageFormat.Jpeg)

示例 pictureBox2.Image.Save(@"D:/CameraImge/"+文件夹名称+"/"+编号+".jpg", ImageFormat.Jpeg);


1
投票

你写这样的代码。

string appPath = Path.GetDirectoryName(Application.ExecutablePath) +foldername ;
pictureBox1.Image.Save(appPath + @"\" + filename + ".jpg", ImageFormat.Jpeg);

0
投票

有什么解决方案吗?想要实现一个项目,需要保护照片,使我的项目和环境像 BD 一样,但没有任何问题。 Agradecería se me dicen se se helló la solución y cuál fue.

© www.soinside.com 2019 - 2024. All rights reserved.