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. Щелкните изображение правой кнопкой мыши -> окно "Свойства" -> Выберите "Всегда копировать" или "Копировать, если новее" из раскрывающегося меню "Копировать".
Вот и все.