2009-06-29 7 views
4

현재 로그인 한 사용자의 즐겨 찾기를 가져 오는 일부 C# 코드가 있습니다. 이 코드는 Windows 탐색기 프로세스로로드되는 작업 표시 줄 도구 모음의 일부입니다. 로밍 프로필 또는 폴더 리디렉션 설정이 있고 활성화 된 도메인에서 UAC를 사용하는 Windows Vista를 사용하는 사용자가 있습니다. 즐겨 찾기 경로에서 Directory.GetDirectories를 호출하면 "System.IO.DirectoryNotFoundException : 'C : \ Users \\ Favorites \"경로의 일부를 찾을 수 없습니다. 로밍 프로필 또는 폴더 리디렉션 설정이없는 다른 도메인의 다른 사용자에게는이 문제가 없습니다.DomainNotFoundException 도메인 폴더 리디렉션으로 인해 Environment.SpecialFolder.Favorites에서 Directory.GetDirectories를 호출 할 때

사용자는 실패한 로그에서 실행 프롬프트로 경로를 복사해도 경로를로드하지 못하지만 탐색기를 사용하여 직접 경로를 탐색 한 다음 해당 경로를 복사하여 실행 프롬프트에 붙여 넣으면 작동하는 것으로보고되었습니다 . 그는 나에게 두 가지 경로를 모두 보냈는데 정확히 일치하지 않으므로 전혀 이해가되지 않습니다.

내 이론은이 경로가 실제로 서버의 공유를 가리키고 있지만 Directory.GetDirectories에서 반환 된 directoryInfo의 하위 디렉터리에 액세스하려고 할 때 리디렉션이 실패한 폴더 리디렉션 때문입니다. 초기 디렉토리는 작동하지만 초기 디렉토리의 모든 서브 디렉토리는 올바르게 리디렉션되지 않습니다.

이런 상황에 처한 사람이 있었거나 리디렉션 된 폴더에 대한 적절한 액세스 권한을 얻을 수있는 해결 방법을 알고 있습니까?

private void GetFavorites() 
    { 
     try 
     { 
      System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Favorites)); 
      AddFavorites(dirInfo); 
     } 
     catch 
     { 
     } 
    } 

private void AddFavorites(DirectoryInfo dirInfo) 
    { 
     foreach (System.IO.FileInfo fileInfo in dirInfo.GetFiles("*.url")) 
     { 
      //string alias = fileInfo.Name.Replace(".url", ""); 

      if (!ItemsBookmarks.ContainsKey(fileInfo.Name)) 
       ItemsBookmarks.Add(fileInfo.Name, fileInfo.Name); 

     } 

     foreach (System.IO.FileInfo fileInfo in dirInfo.GetFiles("*.lnk")) 
     { 

      if (!ItemsBookmarks.ContainsKey(fileInfo.Name)) 
       ItemsBookmarks.Add(fileInfo.Name, fileInfo.Name); 

     } 

     foreach (System.IO.DirectoryInfo objDir in dirInfo.GetDirectories()) 
     { 
      AddFavorites(objDir); 
     } 
    } 

감사합니다,

답변

1

나는 당신이 겪고있는 문제는 포인트를 재분석 관련이있다 생각합니다.

참조 : http://msdn.microsoft.com/en-us/library/bb513869.aspx

참조 : What is the best way to check for reparse point in .net (c#)? 문제는 다음과 같은 구문을 사용하여 피할 수 있습니다

:

private void AddFavorites(string dirPath) 
{ 
    try 
     { 
      foreach (string fileName in Directory.GetFiles(dirPath, "*.*", SearchOption.TopDirectoryOnly)) 
      { 
       //string alias = fileInfo.Name.Replace(".url", ""); 

       if (!ItemsBookmarks.ContainsKey(fileInfo.Name)) 
       { 
        ItemsBookmarks.Add(fileName); 
       } 
      } 

      foreach (string subDirName in Directory.GetDirectories(dirPath, "*.*", SearchOption.TopDirectoryOnly)) 
      { 
       AddFavorites(objDir); 
      } 
     } 
     catch 
     { 
      //error getting files or subdirs... permissions issue? 
      //throw 
     } 
}