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

О доступе к директории

11.12.2016, 10:41. Показов 723. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проверяю доступ к каждой директории на дисках. disks[i] - это "C:" и "D:".
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var di = new DirectoryInfo(globals.disks[i]);
                    foreach (DirectoryInfo dir in di.EnumerateDirectories())
                    {
                        lines.Add(dir.FullName);
                        DirectorySecurity ds = dir.GetAccessControl(AccessControlSections.Access);
                        foreach (FileSystemAccessRule fsar in ds.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
                        {
                            string userRights = fsar.FileSystemRights.ToString();
 
                            lines.Add("    " + userRights);
                            File.AppendAllLines(Directory.GetCurrentDirectory() + "/1.txt", lines);
 
                            if (userRights == "FullControl")
                            {
                                globals.allowPaths[j] = globals.disks[i] + dir.FullName;
                                j++;
                            }
                        }
                    }
На D у есть папка System Volume Information (во вложениях). Она системная, я даже через проводник не могу в неё зайти. А цель моей программы - это прочёсывание диска. Я сначала получаю имена директорий в каждом диске, затем проверяю доступ к каждой директории. Мне нужно, что бы программа не заходила в эту системную папку, т. к. это вызовет исключение. Я проверяю каждую директорию на права доступа к ней.


C#
1
2
3
4
lines.Add(dir.FullName);
 
lines.Add("    " + userRights);
File.AppendAllLines(Directory.GetCurrentDirectory() + "/1.txt", lines);
^ тут я вывожу права к каждой директории (во вложениях). Для System Volume Information все строки указывают "FullControl".

список этих прав тут: https://msdn.microsoft.com/ru-... .110).aspx

Я проверяю, наверное не тем методом (во вложениях).
Миниатюры
О доступе к директории   О доступе к директории   О доступе к директории  

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2016, 10:41
Ответы с готовыми решениями:

Можно ли отправить файл на почту, не переместив её в директории на сервере с временной директории?
Всем добрый день, вопрос такой. Можно ли обращаться к файлу до его перемещения с временной...

Вывести в консоль все файлы и директории, какие есть в текущей директории
вывести в консоль все файлы и директории какие есть в текущей директории. подскажите пожалуйста...

Вывод всех файлов и поддиректорий в заданной директории (добавить в код ввод директории)
.586p .model flat, stdcall std_output_handle equ -11 std_input_handle equ -10 extern...

Надо запретить доступ к директории, кроме одной папки, которая в этой директории находиться
// это директория, ее тоже желательно закрыть // доступ закрыт // доступ закрыт // доступ...

3
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
11.12.2016, 13:10 2
b_d, нужно делать проще. Пробовать зайти в каталог, если не получается (генерируется исключение), то пропускать его. Вариант реализации смотри, например, в теме Глобальный поиск файла.
1
4 / 2 / 1
Регистрация: 27.01.2014
Сообщений: 114
17.12.2016, 19:53  [ТС] 3
Цитата Сообщение от OwenGlendower Посмотреть сообщение
нужно делать проще
сделал сложнее.
C#
1
2
3
4
5
6
DirectoryInfo di = new DirectoryInfo(разрешённый путь);
foreach (DirectoryInfo dir in di.EnumerateDirectories())  // беру сведения о каталогах
{
       if (op != "Hidden, System, Directory" & op != "Hidden, System, Directory, ReparsePoint, NotContentIndexed" & dir.Name != "Windows")
// проверяю атрибуты директории (во все остальные заходит без исключений)... ну такой себе полукастыль. ещё в конце проверяю, а не называется ли эта директория Windows? ^^
}
а далее в цикле foreach можно из dir достать всю нужную информацию по данной директории, если в неё можно зайти.

я замутил вполне рабочую программу, которая ищет нужную папку/файл по всем возможным дискам на компе.
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
17.12.2016, 20:23 4
b_d, это неверное решение т.к. атрибуты каталога не связаны с правами доступа. Плюс проверки флагов через строки это плохая идея с точки зрения скорости и использования памяти. Ну и заодно стоит использовать && вместо & и сравнение путей без учета регистра. Искренне советую отказаться от этого решения и проверять отсутствие доступа по наличию исключения UnauthorizedAccessException.
1
17.12.2016, 20:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2016, 20:23
Помогаю со студенческими работами здесь

Добавление Include-директории и Lib-директории в проект VS2010
Здравствуйте. У меня возникла следующая проблема: Решил поучится в использовании библиотек...

Показать все Расширения в директории и суб директории.
надо Показать все Расширния в директории и суб директории вот только не знаю как зделать ( ...

Скрипт, который удаляет файлы из первой директории, если есть файлы с такими же именами во второй директории
Помоги, пожалуйста, написать скрипт, который удаляет файлы из первой директории, если есть файлы с...

Как указать Апачу, что вместо одной локальной директории надо обращаться к другой локальной директории?
Сиутация следующая. На Windows-компьютере запущен Апач. И он настроен на директорию c:\www ...


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

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