Windows中有很多文件夾是受系統保護的,比如System Volume Information,中文名稱可以翻譯為“系統卷標信息”,這個文件夾里就存儲著系統還原的備份信息。對于這類系統資源,應用程序是無法直接訪問其中的子目錄和文件的,所以必須讓Windows認為我們程序的當前訪問是安全的,才能讓我們訪問,這就要用到System.Security.accessControl命名空間了,它提供了有關安全訪問系統資源的方法。 
    下面是C#寫的一個獲取受保護文件夾的子目錄的函數:
//注意添加名稱空間的引用:using System.Security.AccessControl;
PRivate DirectoryInfo[] GetDirList(DirectoryInfo dirInfo) 
{ 
    if (dirInfo == null || !dirInfo.Exists) 
        return null; 
    DirectoryInfo[] dirInfos = null; 
    try 
    { 
        //一般情況下,按正常方法獲取目錄列表 
        dirInfos = dirInfo.GetDirectories(); 
    } 
    catch { } 
    //如果不為空,那么說明目錄列表成功,否則需要添加安全訪問規則 
    if (dirInfos != null) 
        return dirInfos; 
    //新建賬戶安全訪問規則 
    FileSystemAccessRule fsRule = new FileSystemAccessRule(System.Environment.UserName 
        , FileSystemRights.Modify, AccessControlType.Allow); 
    //添加安全訪問規則 
    DirectorySecurity dirSecurity = dirInfo.GetAccessControl(); 
    dirSecurity.AddAccessRule(fsRule); 
    dirInfo.SetAccessControl(dirSecurity); 
    try 
    { 
        dirInfos = dirInfo.GetDirectories(); 
    } 
    catch (Exception ex) 
    { 
        MessageBox.Show("無法訪問文件夾:" + dirInfo.FullName + "/n" + ex.Message); 
    } 
    //移除安全訪問規則 
    dirSecurity = dirInfo.GetAccessControl(); 
    dirSecurity.RemoveAccessRule(fsRule); 
    dirInfo.SetAccessControl(dirSecurity); 
    return dirInfos; 
}
新聞熱點
疑難解答