В папке 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;
}
Как перестроить этот код?
C#
Переместить картинки в папку
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
других проектов)
Для решения вашей проблемы нужно решить три подзадачи
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
Очень сложный вопрос если честно
Похожие вопросы
- Картинка взята из METANIT.COM 6 глава Делегаты
- Помогите! Ошибка при работе с ярлыком. Объект перемещен или изменен и ярлык больше не работает... Папку не трогала 100 лет
- Нужно переместить файлы (2500 файлов) с папок где они сейчас лежат, на один шаг выше, как это сделать???
- Я переместил все папки с диска С на диск D но теперь они у меня отображаются на раб столе пытаюсь переместить обратно но
- Как переместить папку с игрой из папки "мои документы" ?
- Как переадресовать все 1000 ярлыков одним действием, если папку с файлами-оригиналами нужно переместить?
- Можно ли переместить папку program files x86 в локальный диск D?
- Почему появляется вот такой файл в папках (см. картинку)
- как переместить папку на другой диск?
- нет доступа к папке system32 drivers. что делать? не открыть, не удалить, не переместить не могу.