2 votes

En C#, remplacez " \\ " à "\"

J'ai une corde :

var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";

J'essaie de remplacer \\ à \ .

J'ai essayé ça :

path = path.Replace("\\\\", "\\");
path = path.Replace(@"\\", @"\");

Aucun d'entre eux ne remplace les doubles barres obliques inversées par des barres obliques inversées simples.

10voto

Botz3000 Points 23640

En path ne contient pas de double backslash. "blah\\blah" est en fait blah\blah .

Dans les chaînes littérales normales (celles qui ne commencent pas par un caractère @ ), vous devez échapper à certains caractères en mettant une barre oblique inverse ( \ ) en face d'eux. L'un de ces caractères est la barre oblique inversée elle-même, donc si vous voulez mettre une barre oblique inversée dans une chaîne de caractères, vous l'échappez avec une autre barre oblique inversée, c'est pourquoi path contient tous ces doubles antislashs. Au moment de l'exécution, ce seront des backslashes simples.

Voir ici pour les séquences d'échappement disponibles : FAQ C# : Séquences d'échappement

Chaînes Verbatim (celles qui commencent par un @ ), d'autre part, ne nécessitent pas d'échappement pour la plupart de ces caractères. Ainsi, @"\" est en fait \ . Les seuls caractères que vous devez échapper dans une chaîne verbatim sont les guillemets. Pour ce faire, il suffit de taper un guillemet double. Ainsi, @"""" est en fait " .

Donc si tu voulais mettre d:\project\Bloomberg\trunk\UI.Demo\ en une chaîne de caractères, vous avez deux possibilités.

Littéral de chaîne normal (notez que \ est échappé) :

var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";

ou une chaîne littérale verbatim (pas besoin d'échappement \ ):

var path = @"d:\project\Bloomberg\trunk\UI.Demo\";

2voto

Mehdi Bugnard Points 1652

Vous n'oubliez pas de mettre @ ? devant votre chaîne dit ?

var path = @"d:\\project\\Bloomberg\\trunk\\UI.Demo\\"; 

Mais ça -> @"d : \project\Bloomberg\trunk\UI.Demo\ " ;
est egal -> "d:/project/Bloomberg/trunk/UI.Demo/" ;

1voto

albertjan Points 3679

Dans cette chaîne, le \\ sont des échappatoires pour \ :

var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";

donc ça dit en fait :

@"d:\project\Bloomberg\trunk\UI.Demo\"

Donc quand vous remplacez \\ con \ Vous ne remplacez rien. La double barre oblique ressemblerait à ceci \\\\ dans les chaînes de caractères normales. Ce que vous avez fait correctement dans votre méthode de remplacement.

1voto

Jake Petroules Points 6865

Changez :

var path = "d:\\project\\Bloomberg\\trunk\\UI.Demo\\";

à :

var path = @"d:\\project\\Bloomberg\\trunk\\UI.Demo\\";

et vous serez bien. N'oubliez pas que \\ signifie \ dans les chaînes de caractères normales, donc si vous voulez des doubles backslashes réels, vous devez utiliser \\\\ ou préfixez simplement votre chaîne par @ - comme dans vos appels à Replace.

Deuxièmement, dans l'état actuel des choses, vous n'avez probablement pas besoin d'appeler Replace dans votre situation particulière car ces \\ que vous voyez sont en fait des backslashes simples puisque votre chaîne n'est pas préfixée par @, et les séquences d'échappement sont évaluées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X