目前,我有一个程序可以搜索用户设置目录和子目录中的音乐文件,并将它们添加到集合中。但是,如果其中一个目录受到保护,那么该程序就会失效。我想知道如何在尝试搜索之前检查用户是否可以访问该目录以避免此问题。 下面是我用于搜索的代码,它目前包含“系统卷信息”的基本工作,但由于有可能存在其他受保护的目录,我想更改它以包含它们。
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);
}
}
}
}
}
}
非常感谢:)
答案 0 :(得分:2)
到目前为止,确保您有权访问文件系统对象的最简单方法是尝试访问它。如果失败并显示“拒绝访问”错误,则表示您无权访问。只需检测错误情况,然后继续搜索下一项。
换句话说,委托检查对系统的访问权限,这毕竟是访问权限的最终仲裁者。
答案 1 :(得分:1)
您可以通过替换Write with Read权限来检查this问题。另外,将代码包装在try catch块中,如果抛出异常,您可以假设(或正确检查异常类型以确保)无法遍历该目录。