Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
71 / 62 / 33
Регистрация: 03.09.2013
Сообщений: 306
1

Прерывается работа цикла

27.02.2014, 12:51. Показов 1354. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Код ищет видео файлы на диске, но при попытке поиска в папке корзины $RECYCLE.BIN\код учетки
срабатывают исключения 3 раза и поиск прекращается.
То есть внутренний цикл вообще не срабатывает если искать с корня диска.
Права админа не помогают, ошибка повторяется на SystemVolumeInformation.

Есть какой нибудь способ кроме черного списка починить код?


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 string[] ras = {"*.mkv", "*.avi", "*.mp4"};
            foreach (string r in ras)
            {
                try
                {
                    foreach (string f in Directory.GetFiles(@"V:", r, System.IO.SearchOption.AllDirectories))
                    {
 
                        Icon ico = Icon.ExtractAssociatedIcon(f);
                        Il.Images.Add(i.ToString(), ico.ToBitmap());
                        FileInfo fi = new FileInfo(f);
                        films2[i] = f.Substring(f.LastIndexOf(@"\") + 1) + "," + f + "," + "0" + "," + "true";
 
 
 
                        lw = new ListViewItem(new string[] { f.Substring(f.LastIndexOf(@"\") + 1), f, "0", "true" }, i);
                        lw.Name = f;
 
                        listView1.Items.Add(lw);
                        i++;
                    }
                }
                catch(UnauthorizedAccessException ex) 
                {
                    MessageBox.Show(ex.Message);
                }
            }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2014, 12:51
Ответы с готовыми решениями:

Работа цикла foreach
1. Перед перебором элементов цикл считает их количество и перебирает или перебирает пока не...

Работа цикла по таймеру
Помогите организовать цикл типа for(int i=0;i<10;i++) //тут условие по таймеру, таким образом...

Работа со строками (использование цикла с параметром)
Дано слово. Поменять местами первую из букв а и последнюю из букв о. Учесть возможность того, что...

Task.Factory.Startnew и непонятная работа цикла
Доброго времени суток. Задание лабораторной такое - использовать класс Task, реализовать вычисление...

10
Заблокирован
27.02.2014, 13:18 2
Какой тип ошибки возникает? нету рядом компилятора глянуть.
0
71 / 62 / 33
Регистрация: 03.09.2013
Сообщений: 306
27.02.2014, 13:43  [ТС] 3
В коде написано. Ошибка UnauthorizedAccessException ловится в мессадж.
0
Администратор
Эксперт .NET
9610 / 4752 / 761
Регистрация: 17.04.2012
Сообщений: 9,606
Записей в блоге: 14
27.02.2014, 15:06 4
Цитата Сообщение от Driwars Посмотреть сообщение
ошибка повторяется на SystemVolumeInformation
Попробуйте в проводнике открыть эту папку. Даже от имени администратора не получится. Вам обязательно в неё лезть?
$RECYCLE.BIN лежит в корне, а не в System Volume Information.
0
71 / 62 / 33
Регистрация: 03.09.2013
Сообщений: 306
27.02.2014, 15:25  [ТС] 5
tezaurismosis, в курсе про папки, и где куда лезть не надо.
Про системвольюм я написал потому, что если дать программе права админа проблема с $RECYCLE.BIN исчезает так как появляется туда доступ.

Мне нужно не искать в этих папках, а сделать проверку, и желательно без чернго списка.
Что то вроде исключить из массива Directory.GetFiles(@"V:", r, System.IO.SearchOption.AllDirectories)
папки к которым нет доступа, чтобы цикл не прерывался.
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
27.02.2014, 15:27 6
добавьте try {} catch {} внутрь цикла и прокатит
0
71 / 62 / 33
Регистрация: 03.09.2013
Сообщений: 306
27.02.2014, 15:41  [ТС] 7
da1z, Внутри первого цикла и так есть try {} catch {},
а второй цикл не срабатывает если в Directory.GetFiles(@"V:", r, System.IO.SearchOption.AllDirectories)
есть файлы к которым нет доступа.

По всем правилам из за того что стоит catch на исключение, исключения должны пропустится(в данном случае с выводом меседж боксов) и дальше искать нужные файлы.
В данном же случае цикл вообще не запускается, из за ошибки доступа Directory.GetFiles(@"V:", r, System.IO.SearchOption.AllDirectories) похоже не может заполнится данными.
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
27.02.2014, 15:43 8
ну если во втором цикле его добавить, разве не помогает?
0
71 / 62 / 33
Регистрация: 03.09.2013
Сообщений: 306
27.02.2014, 16:12  [ТС] 9
da1z, нет, второй цикл не запускается совсем.
Смысл в том что массив данные которого в условии цикла вроде как пуст (не может заполнится из за прав доступа).
метод из System.IO; Если он не может игнорировать папки к которым нет доступа похоже придётся переписывать.

Добавлено через 14 минут
Даже вот этот код не работает
C#
1
2
3
4
5
6
7
8
string[] data;
 data = Directory.GetFiles(@"V:\", r, System.IO.SearchOption.AllDirectories);
                    int t=0;
                    while(data.Length>t)
                    {
                        richTextBox1.AppendText(data[i]);
                        t++;
                    }
печально.
0
2 / 2 / 1
Регистрация: 20.02.2014
Сообщений: 9
27.02.2014, 16:32 10
Driwars, Вот код поиска файлов с обработкой исключений:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System.IO;
 
 
private void GetFiles(string putFile, string rasFile)
        {
            try
            {
                DirectoryInfo dir = new DirectoryInfo(putFile);
 
                FileInfo[] files = dir.GetFiles(rasFile); 
                foreach (FileInfo f in files)
                {
                    listBox1.Items.Add(dir + f.Name);
                }
 
                foreach (DirectoryInfo d in dir.GetDirectories())
                {
                    GetFiles(putFile + d.Name + @"\", rasFile);
                }
            }
            catch (Exception e)
            {
                 MessageBox.Show(e.Message);   
            }
        }
 
 
 
private void button4_Click_1(object sender, EventArgs e)
        {
            GetFiles(@"D:\", "*.txt");    //Поиск файлов
        }
0
71 / 62 / 33
Регистрация: 03.09.2013
Сообщений: 306
27.02.2014, 16:56  [ТС] 11
Reflexio, Спасибо. Ваш код тоже самое что и мой по сути, только облегченный. Ещё и вызывает сам себя.
Переделал все работает. Только пришлось разделить поиск файлов в корне диска. И в папках не из черного списка.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
string[] ras = {"*.mkv", "*.avi", "*.mp4"};
 
           foreach (string r in ras)
            {
                    foreach (string f in Directory.GetFiles(@"V:\",r, SearchOption.TopDirectoryOnly))
                    {
 
                        Add_to_ListView(f);
                        i++;
                    }
            
            }
            foreach (string r in ras)
            {
            foreach (string fo in Directory.GetDirectories(@"V:\"))
                    {
 
                        if (fo != @"V:\$RECYCLE.BIN" && fo != @"V:\System Volume Information") 
                        {
                        
                         foreach (string f in Directory.GetFiles(fo,r, SearchOption.AllDirectories))
                         {
 
                          Add_to_ListView(f);
                          i++;
                         }
                        }
                    }
            
            }
можно было убрать один цикл но тогда собьётся порядок.
0
27.02.2014, 16:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2014, 16:56
Помогаю со студенческими работами здесь

WebClient.DownloadFileTaskAsync() FTP прерывается загрузка
Есть список ссылок на файлы ftp. Есть необходимость загрузить эти файлы асинхронно, при этом...

Как из цикла вывести данные для другого цикла?
Вообщем такая фигня... Как из цикла вывести данные для другого цикла? а то он не видит Пример...

Почему прерывается работа программы после чтения их файла?
После считывания данных с файла, программа останавливается,т.е на экран выводиться сообщение: для...

Внезапно при запуске прерывается работа виртуальной машины
Здравствуйте. Подскажите, пожалуйста, почему внезапно прерывается работа виртуальной машины Linux...


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

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