Как я могу проверить права доступа к данному каталогу? - PullRequest
0 голосов
/ 17 сентября 2011

В настоящее время у меня есть программа, которая ищет музыкальные файлы в каталоге и подкаталогах, заданных пользователем, и добавляет их в коллекцию. Однако, если один из каталогов, к которому он обращается, защищен, тогда программа падает. Я хотел знать, как я могу проверить, есть ли у пользователя доступ к каталогу, прежде чем искать его, чтобы избежать этой проблемы. Ниже приведен код, который я использую для поиска, в настоящее время он содержит базовый обход «Информации о системных томах», но, поскольку существует вероятность, что могут быть другие защищенные каталоги, я хотел бы изменить это, чтобы включить их.

    public void SearchForMusic()
    {
        //Searches selected directory and its sub directories for music files and adds their path to ObservableCollection<string> MusicFound
        foreach (string ext in extentions)
        {
            foreach (string song in Directory.GetFiles(SearchDirectory, ext))
            {
                musicFound.Add(song);                   
            }

            foreach (string directory in Directory.GetDirectories(SearchDirectory))
            {
                if (directory.Contains("System Volume Information"))
                {

                }
                else
                {
                    foreach (string song in Directory.GetFiles(directory, ext))
                    {
                    musicFound.Add(song);
                    }

                    foreach (string subDirectory in Directory.GetDirectories(directory))
                    {
                        foreach (string subSong in Directory.GetFiles(subDirectory, ext))
                        {
                            musicFound.Add(subSong);
                        }
                    }
                }
            }
        }
    }

Большое спасибо:)

Ответы [ 2 ]

2 голосов
/ 17 сентября 2011

Самый простой способ убедиться, что у вас есть доступ к объекту файловой системы, - это попытаться получить к нему доступ.Если произойдет сбой с ошибкой «Отказано в доступе», значит, у вас нет доступа.Просто определите это условие ошибки и переходите к следующему элементу поиска.

Другими словами, делегируйте проверку доступа к системе, которая, в конце концов, является конечным арбитром прав доступа.

1 голос
/ 17 сентября 2011

Вы можете проверить этот вопрос, заменив разрешения «Запись» на «Чтение». Кроме того, оберните ваш код в блок try catch, и, если выдается исключение, вы можете предположить (или правильно проверить тип исключения), что каталог нельзя просмотреть.

...