C#

Переместить картинки в папку

В папке 1 лежат куча файлов. Нужно выбрать папку 1 и папку 2 с помощью folderDialog, затем перенести только .png и .jpg картинки из папки 1 в папку 2. Как мне это сделать?
Вот поиск картинок из кучи файлов и выбор папки:
void SearchFilesP()
{
files = Directory.EnumerateFiles(folder, "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".png") || s.EndsWith(".jpg"));
}

if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
folder = folderBrowserDialog1.SelectedPath;
button6.Enabled = true;
label2.Text = folder;
}

Как перестроить этот код?
1) создадим проект назову его ForMailRu (я буду использовать его и для
других проектов)

Для решения вашей проблемы нужно решить три подзадачи

1-ая получить все файлы в папке
2-ая отсечь файлы нужного формата
3-ья перенос файлов

Постараюсь брать ваш же код

задачу 1 я смотрю вы решили

void SearchFilesP()
{
files = Directory.EnumerateFiles(folder, "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".png") || s.EndsWith(".jpg"));
}

однако код немного надо будет переделать

совсем чуть чуть

Чтож я создал на рабочем столе папку в этой папке создал папку 1 и папку 2

папка один наполнена всяким шлаком типа картинок и тд

вторая пустая

поехали кодить:)

Кину на форму один folderBrowser
две кнопки
и два label

одна кнопка выбирает папку 1
другая кнопка папку 2

label же мне служит вспомогательным средством тип что путь построен правильно

решим первую проблему

выбираем кнопку 1 и жмахаем по ней дважды

я вставил ваш код

if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
folder = folderBrowserDialog1.SelectedPath;
button6.Enabled = true;
label2.Text = folder;
}

однако мне пришлось убрать строку

button6.Enabled = true;
и и добавить объявление
string folder;

проверим механику вызова данного копонента

так как это у меня первая кнопка то я заменю
label2.Text = folder;
на
label1.Text= folder;

программа успешно скомпилировалась папка выбирается

повоторим аналогично со втрой кнопкой выйдет это:
private void button1_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
folder = folderBrowserDialog1.SelectedPath;
label1.Text = folder;
}
}

private void button2_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
folder = folderBrowserDialog1.SelectedPath;
label2.Text = folder;
}
}

теперь нам нужно получить файлы папки

перепишем первую функицю (добавим параметр)
следующим образом:
string[] SearchFilesP(string Path)
{
return System.IO.Directory.EnumerateFiles(Path, "*.*", System.IO.SearchOption.AllDirectories)
.Where(s => s.EndsWith(".png") || s.EndsWith(".jpg")).ToArray();
}

и вот такой конструкцией в первой кнопкеполе вызова folderBrowser проверим правильность работы данных функций

код работает осталась лишь механика переноса

для переноса нам потребуется файлы первой папки и путь до второй папки

я добавил ассинхронности чтобы приложение не зависало при выполнении данного этапа

вот код функции копирования (переноса):
async void MovesImages()
{
await Task.Run(() =>
{
if (label1.Text != "" && label2.Text != "")
{
//получаем файлы первой папки
string[] massFile = SearchFilesP(label1.Text);
//Путь до второй папки
string folderath2 = label2.Text;
folderath2 += "\\";
//Осталась лишь механика переноса либо копирования файлов
foreach (string filename in massFile)
{
System.IO.File.Copy(filename, folderath2 + System.IO.Path.GetFileName(filename));
//Перемещение
//System.IO.File.Move(filename, folderath2 + System.IO.Path.GetFileName(filename));
}
}
});
}

полный код:
https://ideone.com/5V9KCQ
Александр Гаврилов
Александр Гаврилов
22 008
Лучший ответ
Очень сложный вопрос если честно
!:
!3Ангар :)
5 650