0

目前,我有一个程序可以在用户设置目录和子目录中搜索音乐文件并将它们添加到集合中。但是,如果它遇到的目录之一受到保护,那么程序就会崩溃。我想知道如何在尝试搜索目录之前检查用户是否有权访问该目录以避免此问题。下面是我用于搜索的代码,它目前包含“系统卷信息”的基本解决方法,但由于可能存在其他受保护的目录,我想将其更改为包含它们。

    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);
                        }
                    }
                }
            }
        }
    }

非常感谢 :)

4

2 回答 2

2

到目前为止,确保您可以访问文件系统对象的最简单方法是尝试访问它。如果它因访问被拒绝错误而失败,则您无权访问。只需检测该错误情况并继续搜索中的下一个项目。

换句话说,委托检查对系统的访问,毕竟这是访问权限的最终仲裁者。

于 2011-09-17T13:40:28.293 回答
1

您可以通过将写入替换为读取权限来检查此问题。此外,将代码包装在 try catch 块中,如果抛出异常,您可以假设(或正确检查异常类型以确保)无法遍历目录。

于 2011-09-17T13:41:37.230 回答