Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
10 / 10 / 3
Регистрация: 29.11.2012
Сообщений: 227
1

Удаление файлов отмеченных в чекбоксе

20.05.2017, 19:16. Показов 2210. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть чекбокс, в нем списком выводятся файлы(полный путь к ним)
нужно чтобы была возможность выбрать файл(галочкой), нажать на кнопку и физически удалить его
перечитал кучу тем, нашел только как удалить выбранный элемент из списка самого чекбокса(физически он остается на компе)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2017, 19:16
Ответы с готовыми решениями:

Удаление файлов отмеченных в checkedListBox'e с ПК
Здравствуйте. Не так давно ради интереса я решил написать программу на C#, которая будет находить в...

Удаление отмеченных записей из раздельно формы
Всем привет помогите пожалуйста безграмотному! Есть таблица Товар с полями (Артикул, название,...

Удаление отмеченных строк из грида и .sdf базы
РРРРРррребятушки)))))в чем может быть дело - код не работает, не удаляет ни из бд ни из грида int...

Удаление отмеченных галочкой (checkbox) статей как в Joomla
Доброго времени суток. Помогите пожалуйста. Делаю небольшую админ панель, но столкнулся с...

10
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
20.05.2017, 20:38 2
Цитата Сообщение от SarMat4Life Посмотреть сообщение
перечитал кучу тем
первая же ссылка в гугле по запросу "удаление файла c#": Метод File.Delete (String)
0
10 / 10 / 3
Регистрация: 29.11.2012
Сообщений: 227
21.05.2017, 14:47  [ТС] 3
Цитата Сообщение от Shogun31337 Посмотреть сообщение
"удаление файла c#": Метод File.Delete (String)
это то я знаю, вопрос в другом, как к чекбоксу прикрутить
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
21.05.2017, 15:00 4
Цитата Сообщение от SarMat4Life Посмотреть сообщение
как к чекбоксу прикрутить
Вы же сказали, что знаете как удалить элемент из самого чекбокса... Что мешает в тот же код добавить еще одну строку кода для удаления файла?
Покажите каким образом Вы удаляете элемент.
0
10 / 10 / 3
Регистрация: 29.11.2012
Сообщений: 227
21.05.2017, 15:04  [ТС] 5
Цитата Сообщение от Shogun31337 Посмотреть сообщение
Покажите каким образом Вы удаляете элемент.
вот кусочек кода, был найден на этом же форуме
C#
1
2
3
4
5
6
7
8
9
10
        private void button3_Click(object sender, EventArgs e)  
        {
            for (int i = checkedListBox1.Items.Count - 1; i >= 0; i--)
            {
                if (checkedListBox1.GetItemChecked(i))
                    checkedListBox1.Items.RemoveAt(i);
                //    File.Delete(checkedListBox1.SelectedItem.ToString());   так не работает
            }
 
        }
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
21.05.2017, 15:29 6
Цитата Сообщение от SarMat4Life Посмотреть сообщение
// File.Delete(checkedListBox1.SelectedItem.ToString()); так не работает
Вообще то должно работать! Правда, совершенно не так как Вам нужно. С чего Вы в цикле перебираете все элементы и находите с галочками, а при удалении файла используете совершенно другую конструкцию и пытаетесь удалить выделенный элемент? Логика не подсказывает, что обращаться к элементам для удаления нужно так же по индексу?
Кроме того, Вы пытаетесь удалить файл уже после того как удален элемент списка, в котором содержится имя файла! Может все таки наоборот нужно?
Ну и еще почитайте как нужно оформлять условные операторы!
0
10 / 10 / 3
Регистрация: 29.11.2012
Сообщений: 227
21.05.2017, 15:39  [ТС] 7
Shogun31337,
переделал)
C#
1
2
3
4
5
6
7
8
9
10
        private void button3_Click(object sender, EventArgs e)  
        {
     //       for (int i = checkedListBox1.Items.Count - 1; i >= 0; i--)
     //       {
     //           if (checkedListBox1.GetItemChecked(i))
     //               checkedListBox1.Items.RemoveAt(i);       
     //       }
            File.Delete(checkedListBox1.SelectedItem.ToString());
            checkedListBox1.Items.Remove(checkedListBox1.SelectedItem);
        }
теперь все работает)

Цитата Сообщение от Shogun31337 Посмотреть сообщение
Кроме того, Вы пытаетесь удалить файл уже после того как удален элемент списка, в котором содержится имя файла! Может все таки наоборот нужно?
вот за это отдельное спасибо) не сообразил)
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
21.05.2017, 15:45 8
Лучший ответ Сообщение было отмечено SarMat4Life как решение

Решение

Ну и конечно же подразумевается, что в чекбоксе должны находиться пути к файлам, а не просто их имена! Тут еще стоит отметить, что имя файла тоже является относительным путем, но при этом этот файл должен находиться в одной директории с исполняемым файлом!!!

Добавлено через 1 минуту
Цитата Сообщение от SarMat4Life Посмотреть сообщение
теперь все работает)
Работает, только постановка галочки на удаление не влияет! Вы удаляете выделенный чекбокс, а выделен он может быть даже если галочка не установлена! Кроме того, таким образом можно удалить только 1 файл, вне зависимости от того на скольких чекбоксах стоят галочки.

Добавлено через 5 минут
Вот такой вариант будет, на мой взгляд, более корректным.
C#
1
2
3
4
5
6
7
8
for (int i = checkedListBox1.Items.Count - 1; i >= 0; i--)
{
    if (checkedListBox1.GetItemChecked(i))
    {
        File.Delete(checkedListBox1.Items[i].ToString());
        checkedListBox1.Items.RemoveAt(i);
    }
}
1
10 / 10 / 3
Регистрация: 29.11.2012
Сообщений: 227
21.05.2017, 16:01  [ТС] 9
Shogun31337,
а я и не заметил, что удаляется по одному) спасибо))
с вашего позволения, возьму код себе))
0
0 / 0 / 0
Регистрация: 23.04.2018
Сообщений: 26
05.05.2018, 05:11 10
Shogun31337, а что сделать если выдаёт исключение "Процесс не может получить доступ к файлу "312312.jpg", так как этот файл используется другим процессом."
Мне кажется это из за того что файл открыт в PictureBox, как можно исправить данное исключение?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void Button3_Click(object sender, EventArgs e)
        {
            try
            {
                if (MessageBox.Show(text: $"Вы точно хотите удалить {checkedListBox1.SelectedItem.ToString()}?", caption: "Info", buttons: MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    for (int i = checkedListBox1.Items.Count - 1; i >= 0; i--)
                    {
                        if (checkedListBox1.GetItemChecked(i))
                        {
                            File.Delete(checkedListBox1.Items[i].ToString());
                            checkedListBox1.Items.RemoveAt(i);
                        }
                    }
                }
                
            }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string itemValue = checkedListBox1.Items[checkedListBox1.SelectedIndex].ToString();
            if (checkedListBox1.SelectedIndex >= 0)
            {
                try
                {
                    if (File.Exists(itemValue))
                    {
                        pictureBoxImagePreview.Image = Image.FromFile(itemValue);
                    }
                }
                catch (System.OutOfMemoryException)
                {
                    
                }
            }
        }
0
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
05.05.2018, 09:19 11
Цитата Сообщение от Sarax Посмотреть сообщение
Shogun31337, а что сделать если выдаёт исключение "Процесс не может получить доступ к файлу "312312.jpg", так как этот файл используется другим процессом."
Мне кажется это из за того что файл открыт в PictureBox, как можно исправить данное исключение?
Ну, во-первых, если Вы удаляете файл, то было бы логично, если бы он закрывался и в пикчербоксе... Делать это нужно, разумеется, перед тем как удалять файл, чтобы не было конфликта доступа.
А, во-вторых, если уж хочется, чтобы файл после удаления оставался открытым в пикчербоксе, то нужно открывать его таким образом, чтобы он не блокировался. Например, так:
C#
1
2
3
4
5
6
Bitmap bmp;
using (var stream = new FileStream("312312.jpg", FileMode.Open))
{
    bmp = new Bitmap(stream);
}
pictureBox1.Image = bmp;
Теперь файл после открытия в PictureBox будет "отпущен" и его можно будет удалить (разумеется, при условии, что он не открыт где то еще). При этом в PictureBox он будет продолжать отображаться.
0
05.05.2018, 09:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2018, 09:19
Помогаю со студенческими работами здесь

Не могу осуществить удаление из массива уже не отмеченных строк в ListView
Добрый вечер. Делаю ListView с чекбоксами и кнопкой, после нажатия на которую в массив записываются...

Написать программу, которая обеспечивает:начальное формирование каталога файлов;вывод каталога файлов;удаление файлов...
Уважаемые хакеры!Прошу вашей помощи!Я в СИ не особо шарю.((( А на днях уже сдавать.Очень...

Как сделать закачку и удаление файлов, создание и удаление каталогов?
Как сделать закачку и удаление файлов, создание и удаление каталогов?

Как закрыть доступ на удаление файлов и автоматизировать их удаление через определенный промежуток времени?
Добрый день, жители форума. Есть следующая проблема: Имеется компьютер с виндовс хр, на один из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru