簡體   English   中英

在字符串C#中將“ \\”替換為“ \\\\”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM