My C# application writes its full path surrounded by double quotes to a file, with:
streamWriter.WriteLine("\"" + Application.ExecutablePath + "\"");
Normally it works, the written file contains
"D:\Dev\Projects\MyApp\bin\Debug\MyApp.exe"
But, if the executable path of my application contains a #, something weird happens. The output becomes:
"D:\Dev\Projects#/MyApp/bin/Debug/MyApp.exe"
The slashes after the # become forward slashes. This causes issues with the system I am developing.
Why is this happening, and is there a way to prevent it that is more elegant than string.replacing the path before writing?
I just looked into the source code of
Application.ExecutablePath, and the implementation is essentially this*:The property
Assembly.CodeBasewill return the location as an URI. Something like:The
#is the fragment marker in a URI; it marks the beginning of the fragment. Apparently, theUriclass alters the given uri when it’s parsed and converted back to a string again.Since
Assembly.Locationcontains a ‘normal’ file path, I guess your best alternative is:*) The implementation is more complex than this, because it also deals with situations where there are multiple appdomains and other special situations. I simplified the code for the most common situation.