J'ai des problèmes avec la propriété sélectionnéePath du folderbrowserDialog lorsque le dossier que j'ai sélectionné est sur un serveur distant et est un lien symbolique (ou tout type de point de reparse).
Si je sélectionne un dossier normal, puis Je reçois le chemin complet de retour, par exemple "\ Server \ dossier \ Sousfolder \ Thing_I_Clicked_on". P>
Toutefois, si le dossier est un point de repère, je reçois juste "\ Server \ Thing_Inkicked_on" (donc il manque donc de Le chemin complet) P>
var dialog = new FolderBrowserDialog(); dialog.ShowDialog(); MessageBox.Show(dialog.SelectedPath);
3 Réponses :
Comment puis-je Accédez par programmation Le chemin cible d'un lien Windows Symbolic doit être ici. Êtes-vous sûr de savoir que vous avez besoin exactement de chemin complet, pas de chemin à repasser le point? Je pense que vous pouvez utiliser ce chemin à la place. "Nothathat Windows ne prend pas en charge les jonctions à des répertoires sur des actions distantes." Preuve P>
Bonjour, que ce soit complet ou relatif, j'ai besoin de tout le chemin, ce qui n'est pas ce que je reçois. Merci pour le lien - Les fenêtres de lien autorisent absolument des liens symboliques à des répertoires distants (les jonctions et les liens symbliques sont à la fois reparé des points mais non les mêmes): mklink / d C: \ bla \\ serveur \ chemin \ to \ bla
Ha! On dirait que ceci est la réponse: lien
Alors, j'ai beaucoup enquêté sur cette question et je pense avoir une réponse.
Premier, un peu d'explication sur ce que je voyais! p>
sur serveur A, il existe une part qui contient un lien symbolique vers une action sur serveur B: p> et la cible de celle-ci est p> Qu'est-ce qui se passait réellement était, la valeur renvoyée de J'ai créé ma propre enveloppe en suivant ce exemple MSDN et remarqua que la fonction shoell32.dll Si le paramètre PIDL spécifie un raccourci, le pszpath contiendra
Le chemin du raccourci, pas à la cible du raccourci p>
blockQuote> J'ai remarqué que le chemin d'accès auparavant est le bon, donc dans ma méthode de rappel lorsque l'état a changé, j'ai capturé le chemin sélectionné non traduit P> folderbrowserdialog.selectedpath code> était \\ Serverb \ Dossier Code>, et je pensais à tort que cela manquait des parties du chemin, car les chaînes Servera et Serverb sont très similaires! Désolé d'induire en erreur tout le monde. P> shgetpathfromidlist code> renvoie la cible du point de reparse, malgré le fait que la documentation indique P>
private int FolderBrowserCallback(IntPtr hwnd, int msg, IntPtr lParam, IntPtr lpData)
{
switch (msg)
{
case BrowseForFolderMessages.BffmSelchanged:
if (haveValidPath && !String.IsNullOrEmpty(displayedPath))
{
if (IntPtr.Zero != _hwndEdit)
{
SelectedFullPath = displayedPath;
}
}
La réponse d'Andy ressemble à cela fonctionnera, à l'exception des détails manquants, et je ne peux pas comprendre où ajouter son extrait de code à l'exemple de code MSDN. Je peux obtenir le code "Sample MSDN" pour fonctionner, je ne sais tout simplement pas où glisser dans les trucs d'Andy. P>
Alors ... pour ceux d'entre vous comme moi qui ne peuvent pas comprendre quoi faire avec le code ci-dessus (je souhaite vraiment savoir ce que je faisais;) Voici une sorte de solution de contournement boiteux. p>
Utilisez la classe Filedialog au lieu de la navigation de navigation et réglez le; p>
Notez que lorsque cela est fait, si l'utilisateur clique sur un raccourci Windows à l'ancienne (* .lnk), il (le raccourci) sera renvoyé comme nom de fichier. P>
J'espère que cela aide;) (Je vais travailler à obtenir une "réputation" afin que je puisse commenter le poste d'Andy pour obtenir les détails de sa réponse, car il a l'air vraiment bien.) P>
Êtes-vous en cours d'exécution comme administrateur ou quelque chose? probablement des trucs UNC? Je ne suis pas sûr, mais c'était mes pensées
Courir comme administrateur ne fait aucune différence que j'ai peur :(