Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
3 / 3 / 1
Регистрация: 09.04.2014
Сообщений: 62

Подскажите как реализовать проверку прав доступа к папке

28.04.2014, 12:03. Показов 3025. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю небольшой файловый менеджер, и когда захожу в папку, к которой нед доступа, прога вылетает. Помогите пожалуйста реализовать проверку(переменная, в которую записан путь, называется folder, если доступ есть переменную bool right меняем на true). Заранее спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.04.2014, 12:03
Ответы с готовыми решениями:

Проверка прав доступа к папке
Прошу помощи. Необходимо в указаном пути перебрать папки на доступ к ней юзера. string abc; ...

Проверка прав доступа к папке (диску).
Меня интересует такой вопрос, как можно проверить возможно ли создать файл в папке. Можно конечно попробовать создать файл и в случае...

Настройка прав доступа к папке на сервере
Господа помоги со скриптами При создании счетчика на ASP - счетчик пишет в папку с тестовым файлом count.txt - как настроить права...

7
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
28.04.2014, 12:06
"Заходите" каким образом? Учитывая реализацию классов FileInfo и DirectoryInfo, которыми Вы наверное и пользуетесь, вероятнее всего придётся в try...catch завернуть все опасные места.
1
349 / 262 / 65
Регистрация: 07.04.2014
Сообщений: 1,603
28.04.2014, 12:07
Проверка прав доступа к папке / C# .NET
1
3 / 3 / 1
Регистрация: 09.04.2014
Сообщений: 62
28.04.2014, 17:08  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
"Заходите" каким образом? Учитывая реализацию классов FileInfo и DirectoryInfo, которыми Вы наверное и пользуетесь, вероятнее всего придётся в try...catch завернуть все опасные места.
C#
1
2
3
4
5
6
7
8
9
10
11
12
            if (Directory.Exists(folder) == true)
                foreach (string line in Directory.GetDirectories(@folder))
                {
                    string name = "";
                    foreach (char x in line)
                    {
                        if (x == '/' || x == '\\') name = "";
                        else name += x;
                    }
                    listBox1.Items.Add("folder:" + name);
                }
            else MessageBox.Show("Папки не существует", "ERROR");
Вот код если вы про это. Также и с файлами только GetFiles
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
28.04.2014, 18:56
Лучший ответ Сообщение было отмечено Elizar_ELA как решение

Решение

Exists в идеале не порождает исключений, а вот GetDirectories очень даже, соответственно, если не заранее проверять права, как парой сообщений Выше тему упомянули, то следующим образом можно поступить:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            if (Directory.Exists(folder))
            {
                string[] directories = null;
                try
                {
                    directories = Directory.GetDirectories(folder);
                }
                catch (ArgumentException) { }
                catch (NotSupportedException) { }
                catch (SecurityException) { }
                catch (IOException) { }
                catch (UnauthorizedAccessException) { }
                if (directories != null)
                    foreach (string line in directories)
                    {
                        // что-то делаем
                    }
            }
1
3 / 3 / 1
Регистрация: 09.04.2014
Сообщений: 62
28.04.2014, 23:10  [ТС]
Цитата Сообщение от Spawn Посмотреть сообщение
Exists в идеале не порождает исключений, а вот GetDirectories очень даже, соответственно, если не заранее проверять права, как парой сообщений Выше тему упомянули, то следующим образом можно поступить:
1. На ту тему что упомянули я и сам натыкался, но не разобрался.

2. Так как вы сказали щяс попробую, Спасибо)

3. Так для справки, как заранее проверять права? Если вы оговорились об этом, то это как минимум возможно)

Добавлено через 9 минут
И еще не совсем понял как тут все работает можете сказать куда запихнуть messegebox с ошибкой?
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
28.04.2014, 23:25
Цитата Сообщение от Elizar_ELA Посмотреть сообщение
И еще не совсем понял как тут все работает можете сказать куда запихнуть messegebox с ошибкой?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (Directory.Exists(folder))
{
    bool err = true;
    try
    {
        // все необходимые действия
        err = false;
    }
    catch {}
    if (err)
        MessageBox.Show("Ошибка с доступом к директории");
}
else
    MessageBox.Show("Не существует директория");
Ошибка там не только с доступом на самом деле, но в общем случае вполне сойдёт, зависит от первоначальной задачи в общем-то.

Что касается проверки заранее, то тоже на мой взгляд зависит от первоначальной задачи. Этот процесс довольно муторный и ни разу не легче try...catch, так что для каждой задачи свои пути решения.
1
3 / 3 / 1
Регистрация: 09.04.2014
Сообщений: 62
29.04.2014, 00:22  [ТС]
Я лично сделал так:

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
public void DAF(string folder)//DAF - Directory and Files
        {
            
            if (Directory.Exists(folder))
            {
                string[] directories = null;
                try
                {
                    directories = Directory.GetDirectories(folder);
                }
                catch (ArgumentException) { }
                catch (NotSupportedException) { }
                catch (SecurityException) { }
                catch (IOException) { }
                catch (UnauthorizedAccessException) { }
                if (directories != null)
                {
                    listBox1.Items.Clear();
                    Gfolder = folder;
                    textBox1.Text = folder;
                    foreach (string line in directories)
                    {
                        string name = "";
                        foreach (char x in line)
                        {
                            if (x == '/' || x == '\\') name = "";
                            else name += x;
                        }
                        listBox1.Items.Add("folder:" + name);
                    }
                }
                else MessageBox.Show("Отказано в доступе!!", "ERROR");
                //Files
                try
                {
                    directories = Directory.GetFiles(folder);
                }
                catch (ArgumentException) { }
                catch (NotSupportedException) { }
                catch (SecurityException) { }
                catch (IOException) { }
                catch (UnauthorizedAccessException) { }
                if (directories != null)
                    foreach (string line in directories)
                    {
                        string name = "";
                        foreach (char x in line)
                        {
                            if (x == '/' || x == '\\') name = "";
                            else name += x;
                        }
                        listBox1.Items.Add("file:" + name);
                    }
            }
            else MessageBox.Show("Папки или файла не существует", "ERROR");
        }
Все хорошо работает, спасибо что помогли разобраться)))

И если сможете, то помогите ка-то сократить код)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2014, 00:22
Помогаю со студенческими работами здесь

Нет прав доступа к сетевой папке
Два компьютера с windows xp sp3 в локалке На одном компьютере расшарено 2 папки. С другого компьютера должен быть доступ к обоим...

Изменение (сброс) прав доступа к локальной папке
Компьютер принадлежал домену На компе была папка, доступная по сети группе из домена. После смены домена прекратился локальный доступ к...

Журнал изменений прав доступа к общей папке
Мальчишки привет! :) Тут возникла такая проблемка, у меня дома с соседями общая сетка под Windows 7. И я вдруг обнаружила, что одна...

Скрипт для назначения прав доступа к папке
Дорогие друзья , есть задача есть группа пользователей D и P, нужно для первой группы задать права на папку чтение выполнение но без...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru