目前我有一個程序可以搜索音樂文件的用戶設置目錄和子目錄,並將它們添加到集合中。但是,如果它所涉及的目錄之一受到保護,那麼程序就會崩潰。我想知道如何檢查用戶是否有權訪問目錄,然後再嘗試搜索以避免此問題。 下面是我用於搜索的代碼,它目前包含了一個關於「系統卷信息」的基本工作,但由於可能存在其他受保護的目錄,我希望將其更改爲包含它們。如何檢查給定目錄的訪問權限?
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);
}
}
}
}
}
}
非常感謝:)
+1; @Jonathan:異常處理('try' /'catch')應該保留用於特殊情況,除非您使用的API不提供其他選項。儘可能使用狀態檢查或「嘗試」變體。雖然('GetAccessControl'),我在這裏看不到方便的一個。所以你可能會被一個異常處理程序困住。但要確保你捕獲'UnauthorizedAccessException'(或者引發任何特定的異常),而不是基類'Exception'類。 –
@Merlyn你關於'try/catch'的觀點是有效的,但它絕對不應該覆蓋behvaiour的正確性。避免使用'try/catch'並實現你自己的權限檢查代碼可能會讓你很高興不使用正常行爲的異常,但是當你的程序表現不佳時,這並不是一種安慰。另外,在我的回答中,我提到檢測錯誤而不是例外。良好的文件處理API應該提供TryXXX變體。 –
我完全同意。當你有一個現有的檢查方法,並且你可以確信它捕獲了你感興趣的案例時,我的觀點就會成立。如果你不能得到足夠的信任的代碼,一個異常處理器加上一個註釋說明爲什麼你吞嚥異常肯定是爲了。 –