[英]Replacing '\' with “\\” in string C#
我有一個替換字符串的“簡單”問題。
我遵循類似的系統的字符串數量未知:
'W8D6m \\ 2alNzPUW2d2m4V9EksLHg ='
注意字符串中的“ \\”,我想做的是讓程序忽略它而不將其視為轉義字符。 該代碼引發了錯誤
File.WriteAllText(Application.StartupPath + "\\Users\\" + UniqueID, NewUser.ToString());
UniqueID是一個字符串變量,用於保存引發錯誤的部分,因為它認為斜杠的兩側都是路徑的一部分。 所以我試圖通過執行以下操作來替換它:
UniqueID = UniqueID.Replace(@"\", "\\");
但是那也不起作用,所以我試圖弄清楚,如果字符串中包含“ \\”,我應該如何使程序忽略(它必須存在,所以簡單的刪除不能成為解決方案)
如果這一切令人困惑,那么我需要做的是讓'W8D6m \\ 2alNzPUW2d2m4V9EksLHg ='認為它是完整路徑,因為它是文件名而不是文件夾。 我希望這是文件名。 例如http://prntscr.com/9tm9ed
問題在於您試圖將反斜杠存儲為文件名,但這是不可能的。 如果可以這樣做,計算機將如何知道您是否正在嘗試訪問目錄或文件?
最好的選擇是用另一個字符替換反斜杠。 您似乎正在使用標准的Base64字母,所以我建議使用字符“-”,因為它是不用作Base64編碼一部分的普通字符。
uniqueID.Replace(@"\", "-");
該字符可以替換為常規Base64中未使用的大量其他字符(* ._〜等)。
不過,在嘗試解釋字符時,請務必將其替換為反斜杠!
此字符串中\\
的問題在於,當您串聯時:
<Startup>\Users\W8D6m\2alNzPUW2d2m4V9EksLHg=
它通過以下組件開辟了新的道路:
<Startup> \ Users \ W8D6m \ 2alNzPUW2d2m4V9EksLHg=
您不應該使用*()\\
etc字符來構造文件/文件夾名稱,它具有特殊含義。
您簡單的文件名中不能包含“ \\”。 用諸如“ string”之類的特殊字符串編寫它,然后在讀取時將其轉換回即可
可以確保為您提供正確的文件名而不管輸入什么的解決方案:
static string GetValidFileName(string data)
{
var bytes = System.Text.Encoding.UTF8.GetBytes(@"W8D6m\2alNzPUW2d2m4V9EksLHg=");
return Convert.ToBase64String(bytes).Replace("/", "_");
}
請注意,僅替換反斜杠並不能保證文件名有效,因為根據Path.GetInvalidPathChars()
數組,還有其他一些無效的字符。
用另一個字符串替換輸入字符串中的反斜杠可能會引起沖突,例如"hello\\world".Replace('\\','-')
提供的輸出與"hello-world"
。
請注意,您可能仍要檢查路徑是否過長,某些API將路徑中的字符數限制為260個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.