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

Исключение при поиске файлов

22.06.2017, 11:56. Показов 1311. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, пишу программу для поиска всех txt файлов на диске.
написал программу (код ниже), но вылетает ошибка
Кликните здесь для просмотра всего текста
Additional information: Не удалось найти часть пути "C:\Users\Все пользователи\Документы\Embarcadero\Studio\18.0\PlatformSDKs\android-sdk-windows\tools\lib\monitor-x86_64\p2\org.eclipse.equinox.p2.engine\profileRegistry\DefaultProfile.profile\. data\org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions".

Пробовал открыть данную папку, все замечательно работает, директория существует и в ней находится непонятный файл "jvmargs" при попытке его открыть (с помощью windows explorer) вылетает вот такая странная ошибка -_-
Исключение при поиске файлов


C#
1
2
3
4
5
6
7
8
9
10
string[] filters = { "*.txt", "*.jpg" };
......
foreach (var filter in filters)
{
 subfiles = Directory.GetFiles(@dir, filter, SearchOption.AllDirectories);
foreach (string s in subfiles)
{
ListFiles.AddRange(s.Split(',').ToList());
}
}
Если поставить try перед "subfiles = Directory.GetFiles(@dir, filter, SearchOption.AllDirectories);", то вся папка где появляется исключение отбрасывается
Подскажите пожалуйста, как обработать данное исключение

Добавлено через 4 минуты
dir /x выдал вот такую аказию
Исключение при поиске файлов
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2017, 11:56
Ответы с готовыми решениями:

Как задать глубину просмотра подпапок при поиске файлов?
Друзья, нигде не могу найти алгоритм поиска файлов с заданной глубиной. Задача - реализовать поиск...

Исключение при парсинге файлов
Есть программа using System; using System.Collections.Generic; using System.Linq; using...

Ошибка при поиске среднего гармонического
При поиске среднего гармонического выводит ошибку и не выводит дробные числа. Как исправить? using...

Использование хэштэйбл при поиске одинаковых элементов
Задание вроде бы сделал через список, но не понял следующий момент. В задании предлагается найти...

8
Эксперт .NET
12547 / 8705 / 1311
Регистрация: 21.01.2016
Сообщений: 32,702
22.06.2017, 11:58 2
panterlog, нужно самому реализовывать перебор файлов и папок или рекурсивно или через стёк\очередь.
1
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
22.06.2017, 12:08 3
Данная папка с файлом превышает 260 допустимых символов для пути, в версии 4.6.2 фраемворка можно обойти это такой конструкцией:
C#
1
"\\\\?\\" + long_dir_name
в Windows 10 можно на уровне системы снять это ограничение, а так же как сказали выше самому реализовать перебор
1
2 / 2 / 3
Регистрация: 11.04.2014
Сообщений: 71
22.06.2017, 12:15  [ТС] 4
Usaga, Спасибо за совет) В будущем мб сделаю что-то подобное, а сейчас нет желания этим заниматься да и у обычного юзера маловероятно будет такой "Длинный" путь
Upd, просто исключил папки Windows Users Documents and Settings ProgramData Program Files Program Files (x86) и т,д нужные txt документы в них не хранятся
0
Эксперт .NET
12547 / 8705 / 1311
Регистрация: 21.01.2016
Сообщений: 32,702
22.06.2017, 12:34 5
Цитата Сообщение от panterlog Посмотреть сообщение
сейчас нет желания этим заниматься да и у обычного юзера маловероятно будет такой "Длинный" путь
У юзера как нефиг делать есть папки для доступа к которым у твоего приложения не хватит прав. А значит ты снова получишь исключение, которое остановит перебор. Если желания делать нормально нет, то не беда - пускай фиг знает какая часть ФС будет перебрана, остальное - хрен с ним.
0
2 / 2 / 3
Регистрация: 11.04.2014
Сообщений: 71
22.06.2017, 12:38  [ТС] 6
Usaga, да я часто ловил исключения с доступом к папкам а потом нашел вот эту функцию
теперь могу заглянуть хоть куда)
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
        static bool RequestSeBackupPrivilege()
        {
            LUID luid;
 
            if (!LookupPrivilegeValue(null, "SeBackupPrivilege", out luid))
                return false;
 
            TOKEN_PRIVILEGES_SINGLE tp = new TOKEN_PRIVILEGES_SINGLE
            {
                PrivilegeCount = 1,
                Luid = luid,
                Attributes = SE_PRIVILEGE_ENABLED
            };
 
            IntPtr hToken;
            return
                OpenProcessToken(
                    GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken) &&
                AdjustTokenPrivileges(
                    hToken, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero) &&
                (Marshal.GetLastWin32Error() != ERROR_NOT_ALL_ASSIGNED);
        }
 
        const int SE_PRIVILEGE_ENABLED = 0x00000002;
        const int TOKEN_QUERY = 0x00000008;
        const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
        const int ERROR_NOT_ALL_ASSIGNED = 1300;
 
        [DllImport("kernel32.dll", ExactSpelling = true)]
        static extern IntPtr GetCurrentProcess();
 
        [StructLayout(LayoutKind.Sequential)]
        struct TOKEN_PRIVILEGES_SINGLE
        {
            public UInt32 PrivilegeCount;
            public LUID Luid;
            public UInt32 Attributes;
        }
 
        [StructLayout(LayoutKind.Sequential)]
        struct LUID
        {
            public uint LowPart;
            public int HighPart;
        }
 
        [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool LookupPrivilegeValue(
            string lpSystemName, string lpName, out LUID lpLuid);
 
        [DllImport("advapi32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool OpenProcessToken(
            IntPtr ProcessHandle, UInt32 DesiredAccess, out IntPtr TokenHandle);
 
        [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
        static extern bool AdjustTokenPrivileges(
            IntPtr htok, bool disall, ref TOKEN_PRIVILEGES_SINGLE newst,
            int len, IntPtr prev, IntPtr relen);
    }
0
Эксперт .NET
12547 / 8705 / 1311
Регистрация: 21.01.2016
Сообщений: 32,702
22.06.2017, 12:43 7
panterlog, я не уверен, что данный код отработает для пользователя не состоящего в группе администраторов. Лучше сделать рекурсивный поиск (это как два перста оросить), ну и добавить данную муть для надёжности.
0
2 / 2 / 3
Регистрация: 11.04.2014
Сообщений: 71
22.06.2017, 12:50  [ТС] 8
Usaga, А как это сделать не подскажите ? Допустим в директории находится 500 папок в каждой папке еще 500 папок, как мне обработать каждую из них ? я сделал для C:\\
C#
1
2
3
4
5
subdir = Directory.GetDirectories(s[g]);
                foreach (string dir in subdir)
                {
                    if (dir != s[g] + "Documents and Settings" && dir != s[g] + "Windows" && dir != s[g] + "ProgramData" && dir != s[g] + "Program Files" && dir != s[g] + "Program Files (x86)" && dir != s[g] + "System Volume Information" && dir != s[g] + "Users")
                    {
0
Эксперт .NET
12547 / 8705 / 1311
Регистрация: 21.01.2016
Сообщений: 32,702
22.06.2017, 12:52 9
panterlog, я уже два раза упоминал слово "рекурсия". Если вы смогли нагуглить код для повышения привилегий приложения, то уж это на раз-два найдёте.
1
22.06.2017, 12:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2017, 12:52
Помогаю со студенческими работами здесь

ВК API. Как получить ID людей при поиске?
Здравствуйте, хочу получить идентификаторы людей при поиске людей в вк, но ответ не приходит, вот...

Неполадки с индексами при поиске максимального элемента
Здравствуйте! Возникла проблема, которую пытался, но не смог решить. Задача состоит в том чтобы...

как определить индекс массива при поиске по значению?
B - массив А - значение B.contains(a) определяю было вхождение или нет, а каким образом...

Не работает фильтр при поиске письма (библиотека ImapX)
Короче не могу понять почему не работает фильтр поиска письма... ImapClient client = new...


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

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