2009-06-29 22 views
4

J'ai du code C# qui essaie d'obtenir les favoris pour l'utilisateur actuellement connecté. Le code fait partie d'une barre d'outils barre des tâches qui est chargée dans le processus de l'Explorateur Windows. J'ai un utilisateur qui utilise Windows Vista avec UAC activé sur un domaine qui a des profils itinérants ou la configuration de redirection de dossiers et activé. Lorsque vous appelez Directory.GetDirectories sur le chemin Favoris, il lève "System.IO.DirectoryNotFoundException: Impossible de trouver une partie du chemin 'C: \ Users \\ Favorites \". Les autres utilisateurs sur d'autres domaines qui n'ont pas de profils itinérants ou d'installation de redirection de dossiers n'ont pas ce problème.DirectoryNotFoundException lors de l'appel de Directory.GetDirectories sur Environment.SpecialFolder.Favorites en raison de la redirection de dossiers de domaine

L'utilisateur a également signalé que la copie du chemin des journaux défaillants dans l'invite d'exécution échoue à charger le chemin, mais s'ils naviguent directement dans le chemin à l'aide de l'Explorateur, copiez et collez ce chemin dans l'invite d'exécution. . Il m'a envoyé les deux chemins et ils sont exactement identiques, ce qui n'a aucun sens. Ma théorie est que cela est provoqué par la redirection de dossier où ce chemin pointe réellement vers un partage sur le serveur mais la redirection échoue lors de la tentative d'accès aux sous-répertoires (de l'annuaire directory retourné par Directory.GetDirectories). Le répertoire initial fonctionne mais tous les sous-répertoires du répertoire initial ne parviennent pas à rediriger correctement.

Est-ce que quelqu'un a rencontré une situation comme celle-ci et/ou une solution de contournement pour accéder correctement aux dossiers redirigés?

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

Merci,

John

Répondre

1

Je crois que le problème que vous rencontrez est lié à réanalyser points.

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

Voir: What is the best way to check for reparse point in .net (c#)?

Le problème peut être évité en utilisant la syntaxe suivante:

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