I have already seen the other way around. But this one I can not catch. I am trying to get a part of a web resourcePath and combine it with a local path.
Let me Explain a bit more.
public string GetLocalPath(string URI, string webResourcePath, string folderWatchPath) // get the folderwatcher path to work in the local folder
{
string changedPath = webResourcePath.Replace(URI, "");
string localPathTemp = folderWatchPath + changedPath;
string localPath = localPathTemp.Replace(#"/",#"\");
return localPath;
}
But, When I do this the result is like
C:\\Users
But what I want to have is
C:\Users
Not "\\" but my debug shows it like C:\\Users but in the console it shows it as I expect it.
I want to know the reason for that
thanks..
Because \\ is escape sequence for \
string str = "C:\\Users";
is same as
string str = #"C:\Users";
Later one is known as Verbatim string literal.
For combining paths in code it is better to use Path.Combine instead of manually adding "/"
Your code should be like
public string GetLocalPath(string URI, string webResourcePath,
string folderWatchPath)
{
return Path.Combine(folderWatchPath, webResourcePath.Replace(URI, ""));
}
There is no need to replace / with \ because path names in windows supports both. So C:\Users is same as C:/Users
In C#, \ is special in ""-delimited strings. In order to get a literal \ in a string, you double it. \ is not special in #"" strings, so #"\" and "\\", or #"C:\Users" and "C:\\Users" mean exactly the same thing. The debugger apparently uses the second style in your case.
I believe that debug shows strings with escape chars, and to escape a \ in a non-verbatim (not prefixed with #) string you have to write \\.
Related
Here is my function, I'm trying to replace a string in a file, but c# tells me my regex is malformed. Any ideas?
public void function(string fileName, string path) {
string pathToAmmend = #"$SERVERROOT\pathpath";
string newPath = #"$SERVERROOT\" + path;
File.WriteAllText(fileName, Regex.Replace(File.ReadAllText(fileName), pathToAmmend, newPath));
....
}
It works if i change the strings to:
string pathToAmmend = #"$SERVERROOT\\pathpath";
string newPath = #"$SERVERROOT\\" + path;
But then I have two slashes and I only want one slash.
It sounds like you don't actually need a regular expression at all. It sounds like you quite possibly just want string.Replace:
// Split into three statements for clarity.
string input = File.ReadAllText(fileName);
string output = input.Replace(pathToAmend, newPath);
File.WriteAllText(output);
Only use regular expressions when you're genuinely trying to match patterns.
A \ is a special escaping character in regular expressions. You have to escape it so that it will be interpreted as a literal \ and not an escape sequence. $ is also a special character (an end anchor), so you'll want to escape that as well.
string pathToAmmend = #"\$SERVERROOT\\pathpath";
Using # to create a verbatim string only means you don't have to escape the \ for the sake of the C# compiler. You still have escape the \ for in a regular expression pattern. Without the verbatim string this would be:
string pathToAmmend = "\\$SERVERROOT\\\\pathpath";
Of course, as Jon Skeet points out, for something this simple, regular expressions aren't really the best way to go here.
I have a String with a path in it.
It looks like this :
TaskManager = "RegistryKey objRegistryKey = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");"
I want to use this string to compile with codedom, but I get an error saying "cant find Software\Microsoft......".
Is there anyway to replace the " with another char?
I use verbatim string literal for paths so I don't have to double the backslashes:
TaskManager = #"RegistryKey objRegistryKey = Registry.CurrentUser.CreateSubKey(""Software\Microsoft\Windows\CurrentVersion\Policies\System"");"
" is doubled ""
to write " inside a string use \"
String str= "my string with \"quotes\""; // my string with "quotes"
the character \ is used to write special character inside a string for example a \t write inside the string a tab and \n make the string go to a new line
or
String str= #"my string with ""quotes"""; //same as before
the character # before a string make the compiler take the string as is, every special character is written without having to use \ before it, the only character that need to be escaped are the quotes itself that you write by doubling them ""
Watch out that iff you use the method with # your \ \ in the path become \
If you are trying to escape the qoute then do something like this:
TaskManager = "RegistryKey objRegistryKey = Registry.CurrentUser.CreateSubKey(\"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\");"
Use \"
to get a double quote, the same way as you used \ to get a backslash.
TaskManager = "RegistryKey objRegistryKey = Registry.CurrentUser.CreateSubKey(\"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\");"
That should fix it.
you can use it this way
TaskManager = "RegistryKey objRegistryKey = Registry.CurrentUser.CreateSubKey('Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System');"
How to make a variable in a path in c#? For like creating a user register/login/stats.
string UserName = "";
string path = #"c:\File\File\" + UserName + ".text";
I know this doesn't work, maybe does anybody know how to do it else, I search around and never found a solution to get a path like this.
I hope somebody will solve it!
You can use / (slashes) instead of \ (backslashes) or you can escape the backslash adding another backslash behind it:
string path = "c:\\File\\File\\"+ Username + ".text";
That way is absolutly OK for simple concating strings. There are other ways like
string.Format function
or the
StringBuilder class
This is all absolutly OK but if you will be absolutly sure that you create a vaild Path use
Path.Combine
The only reason that doesn't work is because of the escape characters. Any of the following will work;
string path = "c:\\File\\File\\"+ Username + ".txt"; // escape first slash, second appears in string
string path = #"c:\File\File\"+ Username + ".text"; // take literal string, escape sequences included
string path = "c:/File/File/"+ Username + ".text"; //forward slash is not an escape
You can easily get an array of invalid file name characters
char[] invalidPathChars = Path.GetInvalidPathChars();
foreach (char ch in invalidPathChars)
{
Username = Username.Replace(ch.ToString(), "");
}
I need to replace double quotes with single so that something like this
\\\\servername\\dir1\\subdir1\\
becomes
\\servername\dir1\subdir1\
I tried this
string dir = "\\\\servername\\dir1\\subdir1\\";
string s = dir.Replace(#"\\", #"\");
The result I get is
\\servername\\dir1\\subdir1\\
Any ideas?
You don't need to replace anything here. The backslashes are escaped, that's why they are doubled.
Just like \t represents a tabulator, \\ represents a single \. You can see the full list of Escape Sequences on MSDN.
string dir = "\\\\servername\\dir1\\subdir1\\";
Console.WriteLine(dir);
This will output \\servername\dir1\subdir1\.
BTW: You can use the verbatim string to make it more readable:
string dir = #"\\servername\dir1\subdir1\";
There is no problem with the code for replacing. The result that you get is:
\servername\dir1\subdir1\
When you are looking at the result in the debugger, it's shown as it would be written as a literal string, so a backslash characters is shown as two backslash characters.
The string that you create isn't what you think it is. This code:
string dir = "\\\\servername\\dir1\\subdir1\\";
produces a string containing:
\\servername\dir1\subdir1\
The replacement code does replace the \\ at the beginning of the string.
If you want to produce the string \\\\servername\\dir1\\subdir1\\, you use:
string dir = #"\\\\servername\\dir1\\subdir1\\";
or:
string dir = "\\\\\\\\servername\\\\dir1\\\\subdir1\\\\";
This string "\\\\servername\\dir1\\subdir1\\" is the same as #"\\servername\dir1\subdir1\". In order to escape backslashes you need either use # symbol before string, or use double backslash instead of one.
Why you need that? Because in C# backslash used for escape sequences.
This is probably a really simple question but I can't seem to get my head around it. I need to have a string that contains \" without it seeing it as an escape character. I tried using # but it won't work. The only other way I thought of doing this would be to use \u0022 but don't want to unless I can help it.
Desired string - string s = "\"\""; // Obviously this doesn't work!
Desired console output - \"\"
Hope this makes sense.
Thanks!
Try
string s = "\\\"\\\"";
You have to escape your backslashes too.
Mike
You can use the literal, but you need to double-up quotes.
string s = #"\""\""";
In verbatim string literals (#"...") a " in the string value is encoded as "", which happens to also be the only escape sequence in verbatim strings.
#"\""Happy coding!\""" // => \"Happy coding!\"
"\\\"Happy coding!\\\"" // => \"Happy coding!\"
Note that in the 2nd case (not a verbatim string literal), a \ is required before the \ and the " to escape them and prevent their normal meanings.
See the C# string reference for more details and examples.
I think you have to escape backslashes too... so something like "\\\"\\\"" should work, I believe.
Use this string:
string s = "\\\"\\\"";
Console.WriteLine( "\\\"\\\"" );
Just put a \ before each character that needs to be printed.
String s = #"\""\""";
DblQuote characters will escape a second dblquote character
Though for better readability I would go with:
const String DOUBLEQUOTE = """";
const String BACKSLASH = #"\";
String s = BACKSLASH + DOUBLEQUITE + BACKSLASH + DOUBLEQUOTE;
In a verbatim string (a string starting with #"") to escape double quotes you use double quotes, e.g. #"Please press ""Ok"".". If you want to do it with verbatim strings then you would do something like #"\""" (that's 3 double quotes on the end there).
You can do like this,
string s = "something'\\\'";
Use a single '' rather then "" in string to do the same.