FileNotFound当我使用Image.FromFile()

本文关键字:FromFile Image FileNotFound | 更新日期: 2023-09-27 18:06:57

我在这种情况下使用Image.FromFile(string)方法:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace GVEMO
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            PaintBackground();
        }
        public void PaintBackground() {
            gameBoard.Image = Image.FromFile("gvemoBack.jpg");
        }
    }
}

gameBoard是pictureBox的名称。但是当我启动这个程序时,我得到异常FileNotFound。图像是在主目录(目录文件夹bin,类,属性等)我尝试将此图像复制到所有项目目录,但例外仍然存在。这个图像必须在哪个目录下,或者我做错了什么?我使用VS2012和。net框架4.5版本。Thx

FileNotFound当我使用Image.FromFile()

图片必须在当前工作目录下。在启动时,这是您启动应用程序的目录,这可能是可执行文件所在的目录(但一定不是)。注意,这个工作目录可能会改变!

与其使用路径,我建议您使用另一种机制。例如,如果使用FileOpenDialog,则可以将当前工作目录设置为不同的目录。因此,您最好使用资源或图像所在目录的设置。

确保您的文件在解决方案资源管理器中可见。如果没有,请单击解决方案资源管理器中的Show All Files按钮,右键单击图像,然后单击"Include in Project"。

如果文件可见,则在解决方案资源管理器中右键单击图像,选择属性,并确保将Copy to Output Directory选项设置为Copy if newerCopy always,从而确保将图像复制到输出目录。

由于使用了相对路径,因此映像必须驻留在工作目录中。当您启动一个可执行文件时,除非您另有指定,否则工作目录将被设置为可执行文件所在的目录。很明显,图像不在那里。

由于很难对工作目录施加控制,特别是在GUI应用程序中,因此通常最好指定完整的绝对路径而不是相对路径。例如:

string dir = Path.GetDirectoryName(Application.ExecutablePath);
string filename = Path.Combine(dir, @"MyImage.jpg");

然而,对于您的场景来说,更好的方法是将映像作为资源包含,从而使您的可执行文件自包含。然后,您就不需要担心诸如确保图像与可执行文件位于同一目录之类的细节了。

正如jdehaan已经说过的,image应该(通常)与您的可执行文件在同一个目录中。在您的情况下,这很可能是bin'Debug

如果这是一个静态图像,您也可以将其嵌入到程序集中。查看在项目中嵌入图像资源

请确保图像与应用程序可执行文件位于同一目录

如果未指定路径,则使用当前目录。

你可以使用一个相对路径:

./xxx/yyy/file.ext
../../xxx/yyy/file.ext

或绝对路径:

/xxx/yyy/file.ext

或在启动程序之前或在其执行期间更改目录(依赖于语言/平台的解决方案)

我也有同样的问题。

我这样做是为了使它正常工作:

如果图像文件直接添加到项目中:1.右键单击图像->属性窗口->从"复制"下拉菜单中选择"始终复制"或"更新时复制"。