Dupliqué possible: strong>
Comment vérifier si 2 annuelsInfo Les objets pointant vers le même répertoire? P>var dirUserSelected = new DirectoryInfo(Path.GetDirectoryName("SOME PATH")); var dirWorkingFolder = new DirectoryInfo(Path.GetDirectoryName("SAME PATH AS ABOVE")); if (dirUserSelected == dirWorkingFolder) { //this is skipped } if (dirUserSelected.Equals(dirWorkingFolder)) { //this is skipped }
4 Réponses :
Je crois que vous voulez faire ceci:
var dirUserSelected = new DirectoryInfo(Path.GetDirectoryName(@"c:\some\path\")); var dirWorkingFolder = new DirectoryInfo(Path.GetDirectoryName(@"c:\Some\PATH")); if (dirUserSelected.FullName == dirWorkingFolder.FullName ) { // this will be skipped, // since the first string contains an ending "\" and the other doesn't // and the casing in the second differs from the first } // to be sure all things are equal; // either build string like this (or strip last char if its a separator) // and compare without considering casing (or ToLower when constructing) var strA = Path.Combine(dirUserSelected.Parent, dirUserSelected.Name); var strB = Path.Combine(dirWorkingFolder.Parent, dirWorkingFolder.Name); if (strA.Equals(strB, StringComparison.CurrentCultureIgnoreCase) { //this will not be skipped } ............
N'oubliez pas que les mêmes deux chemins peuvent avoir différentes boîtiers => La comparaison insensible à la casse doit être utilisée (comme dans les commentaires de ma réponse).
Parce que cela compare ces deux cas, pas leur valeur (deux références). p>
Est-ce seulement en utilisant les propriétés, c'est-à-dire la propriété .fulname code> que vous comparez de la valeur plutôt que de l'instance?
Dans ce cas, oui. Certaines classes implémentent l'interface Iequatable
objet.equals (objet) code> pour l'opération d'égalité. Le
DistoireIfo CODE> devrait avoir à avoir implémenté
Equals (DirectoryInfo di) {return string.cacher (this.fullName, di.fullName, true) == 0; } code> pour le code ci-dessus pour fonctionner (entre autres). Modifié la comparaison car les chemins pourraient avoir un boîtier différent.
J'ai effectué une recherche Google pour "AnnuaireInfo égalité" et a trouvé plusieurs excellents résultats, dont un sur Stackoverflow ( Comment vérifier si 2 objets de répertoireIfo pointe vers le même répertoire? ) P>
Si deux Si vous comptez sur la connaissance de savoir que deux chaînes ne sont pas le même endroit et que la sécurité est en jeu, vous créez probablement un bogue de sécurité. Marcher soigneusement. P> répertoire.fulname code> s correspondent, vous savez qu'ils sont em> les mêmes, mais s'ils ne correspondent pas, vous ne savez toujours pas grand chose. Il existe des noms courts et des liens et des jonctions et de nombreuses autres raisons deux chaînes différentes pourraient faire référence au même emplacement sur disque. P>
Quelques façons de "tromper" DirectoryInfo: la commande STI code>, la commande
user code> commande ou partage réseau.
Comme Jaroslav Jandek, dit (désolé je ne peux pas commenter, pas assez de réputation)
parce qu'il compare ces deux cas, pas leur valeur (deux Références). P> BlockQuote>
Et en fait, il est pareil pour des tonnes d'autres cas! Pour EX P>
IPAddress ip1 = IPAddress.Parse("192.168.0.1"); IPAddress ip2 = IPAddress.Parse("192.168.0.1");
Le problème de la dernière barre oblique reste toujours.
@Sg: En effet. J'essayais plus d'expliquer la différence de Byval contre Byref que de répondre à la question spécifique (et je n'ai pas pensé à cette affaire non plus).
Quelle raison de comparer des objets DIutiensInfo? Peut-être que vous devriez comparer .fulpath?
Ce ne sont pas les mêmes chemins. Est-ce une sorte de test Streop?
En outre, vos bretelles fermées sont commentées. Si vous voulez que nous mettions de l'énergie pour vous aider, ne vous mettreez-vous pas d'énergie pour poser une bonne question?