FileNotFound, когда я использую Image.FromFile()

Я использую метод 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 Framework версии 4.5. Спасибо

6 ответов

Решение

Изображение должно быть в текущем рабочем каталоге. При запуске это каталог, из которого вы запускаете приложение, это может быть каталог, в котором находится исполняемый файл (но не должен быть). Помните, что этот рабочий каталог может измениться!

Вместо того, чтобы использовать путь, я бы предложил вам использовать другой механизм. Текущий рабочий каталог может быть установлен на что-то другое, если вы используете FileOpenDialog например. Поэтому вам лучше использовать ресурс или параметр для каталога, в котором находятся изображения.

Убедитесь, что ваш файл виден в обозревателе решений. Если нет, нажмите Show All Files Нажмите кнопку в обозревателе решений, щелкните правой кнопкой мыши изображение и выберите "Включить в проект".

Если ваш файл виден, убедитесь, что изображение копируется в выходной каталог, щелкнув правой кнопкой мыши изображение в обозревателе решений, выбрав свойства и убедившись, что Copy to Output Directory опция установлена ​​в Copy if newer или же Copy always,

Поскольку вы использовали относительный путь, изображение должно находиться в рабочем каталоге. Когда вы запускаете исполняемый файл, если не указано иное, рабочий каталог устанавливается как каталог, в котором находится исполняемый файл. Понятно, что изображения там нет.

Поскольку может быть сложно контролировать рабочий каталог, особенно в приложении с графическим интерфейсом, обычно лучше указывать полный абсолютный путь, а не относительный путь. Например:

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

Однако гораздо лучше для вашего сценария было бы включить изображение в качестве ресурса и сделать ваш исполняемый файл автономным. Тогда вам не нужно беспокоиться о деталях, например, убедитесь, что изображения находятся в том же каталоге, что и исполняемый файл.

Как уже сказал jdehaan, изображение должно (обычно) находиться в одном каталоге с вашим исполняемым файлом. Это наиболее вероятно bin\Debug в твоем случае.

Если это статичное изображение, вы также можете встроить его в свою сборку. Посмотрите на встраивание ресурсов изображения в проект.

Убедитесь, что образ находится в том же каталоге, что и исполняемый файл приложения.

Если вы не указываете путь, используется текущий каталог.

Вы можете использовать относительный путь:

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

или абсолютный путь:

/xxx/yyy/file.ext

или измените каталог перед запуском программы или во время ее выполнения (решение зависит от языка / платформы)

Даже у меня была такая же проблема.

Я сделал это, чтобы все работало нормально:

Если файлы изображений добавляются непосредственно в проект: 1. Щелкните изображение правой кнопкой мыши -> окно "Свойства" -> Выберите "Всегда копировать" или "Копировать, если новее" из раскрывающегося меню "Копировать".

Вот и все.

Другие вопросы по тегам