Загрузите первое изображение с любым именем, решите ошибку исключения, скопируйте упавшее изображение в папку - PullRequest
1 голос
/ 28 октября 2019

У меня есть форма, которая загружает свой BgImage по умолчанию из подпапки в месте расположения моего приложения.
Когда виден фоновый рисунок по умолчанию, его можно использовать в качестве области удаления для других распространенных растровых форматов (перетаскивание изображения). из Проводника Windows).
Если в подпапке есть какие-либо изображения, изображение, находящееся на первой позиции в папке, будет загружено в качестве фона по умолчанию.

string path = (full path to folder here, @"image_default\");
string[] anyfirstimage = Directory.GetFiles(path);

if (String.IsNullOrEmpty(anyfirstimage[0]))
{
    // do nothing
}
else
{
    this.BackgroundImage = Image.FromFile(anyfirstimage[0]);
}

Как улучшитьприведенный выше код, чтобы я не получал исключение «Индексные границы вне массива», когда подпапка не содержит изображений?
Вместо получения ошибки исключения в этом случае - есть ли способ перетаскивания следующего изображенияв эту область, чтобы автоматически скопировать его в подпапку как новое изображение по умолчанию, каждый раз, когда запускается форма и в подпапке нет изображений?

1 Ответ

1 голос
/ 28 октября 2019

На самом деле вы можете использовать Application.ExecutablePath, чтобы получить путь к исполняемому файлу. и затем просто легко проверьте, не превышает ли число файлов в нем больше нуля.

string path=Path.Combine(Path.GetDirectoryName(Application.ExecutablePath),"image_default");
string[] anyfirstimage = Directory.GetFiles(path, "*.jpg");
if(anyfirstimage.Length > 0) BackgroundImage = Image.FromFile(anyfirstimage[0]);

Если могут быть другие файлы, кроме изображений, убедитесь, что вы используете перегрузку шаблона GetFiles(), как Directory.GetFiles(path, "*.jpg"), чтобы убедиться, что другой формат файла не выбран.

и в качестве ответа на ваш комментарий шаблон поиска не принимает несколько шаблонов, но вы можете отфильтровать их позже, например:

var anyfirstimage = Directory.GetFiles(path).Where(x=> {var l = x.ToLower();
return l.EndsWith(".jpg") || l.EndsWith(".png") || l.EndsWith(".gif");}).ToArray();

наконец, код должен быть таким:

string path=Path.Combine(Path.GetDirectoryName(Application.ExecutablePath),"image_default");
 string anyfirstimage = Directory.GetFiles(path).Where(x=> {var l = x.ToLower();
  return l.EndsWith(".jpg") || l.EndsWith(".png") || l.EndsWith(".gif");}).FirstOrDefault();
if(anyfirstimage != null) BackgroundImage = Image.FromFile(anyfirstimage);
...