Comment savoir si un fichier se trouve dans un dossier SUBST'ed ou s'il se trouve dans un dossier utilisateur en utilisant C#?Comment déterminer si un chemin de répertoire était SUBST?
Répondre
Je pense que vous devez P/Invoke QueryDosDevice() pour la lettre de lecteur. Les lecteurs Subst renvoient un lien symbolique, similaire à \ ?? \ C: \ blah. Le préfixe \ ?? \ indique qu'il est substitué, le reste vous donne le répertoire drive +.
Si SUBST est exécuté sans paramètres, il produit une liste de toutes les substitutions courantes. Obtenez la liste, et vérifiez votre répertoire par rapport à la liste.
Il y a aussi le problème de mapper un volume à un répertoire. Je n'ai jamais essayé de les détecter, mais les répertoires des points de montage apparaissent différemment des répertoires normaux. Ils doivent donc avoir un attribut différent, qui peut être détecté.
Je pense que vous avez quelques choix -
Via les classes System.Management: http://briancaos.wordpress.com/2009/03/05/get-local-path-from-unc-path/
Ou
Via P/Invoquer cette fonction MAPI: ScUNCFromLocalPath http://msdn.microsoft.com/en-us/library/cc842520.aspx
cela semble prometteur, en regardant dans – petejamd
C'est le code que j'utilise pour obtenir l'information si un chemin est substed: (Certaines parties proviennent de pinvoke)
[DllImport("kernel32.dll", SetLastError=true)]
static extern uint QueryDosDevice(string lpDeviceName, StringBuilder lpTargetPath, int ucchMax);
public static bool IsSubstedPath(string path, out string realPath)
{
StringBuilder pathInformation = new StringBuilder(250);
string driveLetter = null;
uint winApiResult = 0;
realPath = null;
try
{
// Get the drive letter of the path
driveLetter = Path.GetPathRoot(path).Replace("\\", "");
}
catch (ArgumentException)
{
return false;
//<------------------
}
winApiResult = QueryDosDevice(driveLetter, pathInformation, 250);
if(winApiResult == 0)
{
int lastWinError = Marshal.GetLastWin32Error(); // here is the reason why it fails - not used at the moment!
return false;
//<-----------------
}
// If drive is substed, the result will be in the format of "\??\C:\RealPath\".
if (pathInformation.ToString().StartsWith("\\??\\"))
{
// Strip the \??\ prefix.
string realRoot = pathInformation.ToString().Remove(0, 4);
// add backshlash if not present
realRoot += pathInformation.ToString().EndsWith(@"\") ? "" : @"\";
//Combine the paths.
realPath = Path.Combine(realRoot, path.Replace(Path.GetPathRoot(path), ""));
return true;
//<--------------
}
realPath = path;
return false;
}
être sûr que vous avez dans votre classe en utilisant System.Runtime.InteropServices; Sinon, vous obtiendrez une erreur. – gg89
- 1. Déterminer si un chemin est un chemin réseau VBA
- 2. Déterminer si un répertoire est inscriptible
- 3. .NET filesystemwatcher - était-ce un fichier ou un répertoire?
- 4. Comment déterminer si un chemin relatif pointe en dehors d'un chemin donné
- 5. Déterminer si un répertoire peut être déplacé sur NTFS
- 6. django inlineformset_factory - comment déterminer si un formulaire du formset était vide
- 7. Comment déterminer si un OS X dylib était lié avec -flat_namespace
- 8. ASP.NET Comment déterminer si un utilisateur authentifié peut accéder à une page ou un répertoire?
- 9. Déterminer si un répertoire existe déjà en utilisant SVN ANT
- 10. Comment déterminer si un gif est animé?
- 11. Existe-t-il une méthode permettant de déterminer si un chemin de fichier est imbriqué dans un chemin de répertoire .NET?
- 12. Comment déterminer le bon chemin du système de fichiers
- 13. Comment vérifier si un répertoire existe avant d'insérer un fichier
- 14. Comment déterminer le chemin de cookie .NET
- 15. Comment déterminer si objet est un NSNumber
- 16. Comment déterminer si un pthread est actif?
- 17. Comment déterminer si un chemin est relatif ou absolu avec VB Scripting Host
- 18. Comment déterminer si un répertoire se trouve sur la même partition
- 19. Vérifiez si le chemin du répertoire se termine par DIRECTORY_SEPARATOR
- 20. Comment vérifier si un chemin réseau existe?
- 21. Comment réparer un chemin de répertoire Lisp brisé pour Emacs?
- 22. Comment déterminer l'emplacement du répertoire racine IsolatedStorageFile
- 23. Comment vérifier si un répertoire FTP existe
- 24. Comment déterminer si un groupe est un groupe de sécurité?
- 25. Déterminer si un pathspec est un répertoire ou un fichier (ou quelque chose d'autre) via WMI?
- 26. Comment déterminer le chemin d'exécution de mon application?
- 27. Déterminez si un chemin dans un NSString est dans un répertoire ou un fichier?
- 28. Comment puis-je déterminer si une page est un MODAL
- 29. Application SUBST et console par rapport au service Windows
- 30. Déterminer le chemin chargé pour les DLL
Je ne comprends pas ce que vous entendez par « subst'd » ou " dossier utilisateur " – simendsjo
' subst' est une commande DOS qui va créer un alias pour un répertoire (par exemple, 'T: C: \ workareas' va créer un nouveau lecteur qui pointe vers C: \ workareas) pour le dossier utilisateur, i cherche à savoir si c'est dans le 'C: \ Documents and Settings \% username%' proprement. – petejamd