2

I have a long string (a path) with double backslashes, and I want to replace it with single backslashes:

string a = "a\\b\\c\\d";
string b = a.Replace(@"\\", @"\");  

This code does nothing...

b remains "a\\b\\c\\d"

I also tried different combinations of backslashes instead of using @, but no luck.

pascalhein
  • 5,700
  • 4
  • 31
  • 44
user990635
  • 3,979
  • 13
  • 45
  • 66

5 Answers5

8

Because you declared a without using @, the string a does not contain any double-slashes in your example. In fact, in your example, a == "a\b\c\d", so Replace does not find anything to replace. Try:

string a = @"a\\b\\c\\d";
string b = a.Replace(@"\\", @"\"); 
Otiel
  • 18,404
  • 16
  • 78
  • 126
  • I didn't declare a. I showed it here as an example. I get it like that from somewhere else – user990635 Jul 29 '13 at 07:23
  • 1
    So your example is wrong and misleading then, thus we can't answer your question. Are you sure your string "*from somewhere else*" does actually contain double-slashes? – Otiel Jul 29 '13 at 07:24
  • 1
    @user990635: Still: Your Replace statement is correct. It *does* remove double backslashes if there are any. Try to output `b` with `Console.WriteLine` to see for yourself. – Heinzi Jul 29 '13 at 07:24
  • @user990635 - please be careful on what your string variable really containes. And be aware that `"a\\b"` is *NOT* the same as `@"a\\b"`. In fact, as I already mentioned, `"a\\b"` is *the same* as `@"a\b"`. – Corak Jul 29 '13 at 07:30
1

You're wrong. "\\" return \ (know as escaping)

string a = "a\\b\\c\\d";
System.Console.WriteLine(a);  // prints a\b\c\d
string b = a.Replace(@"\\", @"\");  
System.Console.WriteLine(b);  // prints a\b\c\d

You don't even need string b = a.Replace(@"\\", @"\");

Praveen
  • 55,303
  • 33
  • 133
  • 164
1

In C#, you can't have a string like "a\b\c\d", because the \ has a special meaning: it creates a escape sequence together with a following letter (or combination of digits).

\b represents actually a backspace, and \c and \d are invalid escape sequences (the compiler will complain about an "Unrecognized escape sequence").

So how do you create a string with a simple \? You have to use a backslash to espace the backslash:\\ (it's the espace sequence that represents a single backslash).

That means that the string "a\\b\\c\\d" actually represents a\b\c\d (it doesn't represent a\\b\\c\\d, so no double backslashes). You'll see it yourself if you try to print this string.

C# also has a feature called verbatim string literals (strings that start with @), which allows you to write @"a\b\c\d" instead of "a\\b\\c\\d".

sloth
  • 99,095
  • 21
  • 171
  • 219
0

this works

You don't even need string b = a.Replace(@"\", @"\");

but like if we generate a dos command through c# code... eg:- to delete a file this wil help

0

I did this in a code in a UWP application.

foreach (var item in Attendances)
{
   string a = item.ImagePath;
   string b = a.Replace(@"\\", "/");
   string c = a.Replace("\\", "/");

   Console.WriteLine(b);
   Console.WriteLine(a);
   item.ImagePath = c;
}

and the ones without the @ symbol is the one that actually worked. this is C# 8 and C# 9

tmsbrndz
  • 1,297
  • 2
  • 9
  • 23
Rikudou En Sof
  • 526
  • 1
  • 4
  • 21