J'ai un processus automatisé qui génère des Uri localisés, puis les compare à une liste recueillie à partir d'une source distante dans le nuage. Quand on utilise Uri.Compare
sur les chemins, si l'un des chemins contient une barre oblique différente (soit /
vs \
) il signale un 1
au lieu de O
.Uri Comparer pour gérer le slash
Comme une comparaison de /sites/OmegaSandbox\Shared Documents
par rapport à /sites/OmegaSandbox/Shared Documents
.
Comment peut-on normaliser le uri efficacement, ou pour régler la méthode Compare
pour gérer la situation différente de barre oblique à l'aide des outils existants dans .Net
?
Supposition
Path.Combine("/sites/OmegaSandbox", "Shared Documents")
va générer cette chaîne
/sites/OmegaSandbox \ Documents partagés
qui est le début de la question. Une question auxiliaire pourrait être comment obtenir Path.Combine pour respecter la direction de barre oblique d'entrée de main gauche? Maintenant, à ce stade, il est certain que vous pouvez écrire une opération de remplacement de l'expression régulière comme Regex.Replace(" ... ", @"(\\)", "/")
pour échanger les barres obliques et c'est ce que je devrais faire.
Mais la bête StackOverflow doit être nourrie et cette question est de la viande rouge non?
Exemple
string uri1 = Path.Combine("/sites/OmegaSandbox", "Shared Documents");
string uri2 = @"/sites/OmegaSandbox/Shared Documents";
var u1 = new Uri(uri1, UriKind.Relative);
var u2 = new Uri(uri2, UriKind.Relative);
Uri.Compare(u1, u2, UriComponents.Fragment,
UriFormat.SafeUnescaped,
StringComparison.CurrentCultureIgnoreCase);
Le Uri.Compare
ci-dessus, peu importe quels attributs sont définis, ne reviendra un 0
.
Y at-il de la route de la boîte pour obtenir le Compare
ou Combine
de travailler avec différentes barres obliques?
Changer '' partagée Documents' à SharedDocuments' (sans espace) a le même résultat . – OmegaMan