2017-07-28 69 views
-2

我試圖通過在需要的地方注入userIDportalID來構建目錄路徑。如何在C#中使用轉義字符構建字符串

string userID = HttpContext.Current.Request.Params["userID"]; 
string portalID = HttpContext.Current.Request.Params["portalID"]; 

// This is the acutal path ---> string folderName = @"C:\DotNetNuke 8.0\Portals\0\Users\017\17\17"; 
string folderName = "c:\\DotNetNuke 8.0\\Portals\\" + portalID + "\\Users\\0" + userID + "\\" + userID + "\\" + userID; 
HttpContext.Current.Response.Write(folderName); 
// This is what's returned ---> c:\DotNetNuke 8.0\Portals\\Users\0\\ 
+0

我覺得找你e尋找「逐字串文字」,也就是引號前面的「@」符號。檢查參考:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/string – UnholySheep

+3

userID和portalID可能爲空。要構建路徑,請查看Path.Combine(...),而不是使用字符串連接。 – linac

+0

請閱讀[問]並解釋(用語言,而不是代碼中的註釋),你期望看到什麼以及你實際看到了什麼。同時解釋你所嘗試過的。使用調試器檢查變量可以幫助你很多。 – CodeCaster

回答

2

你有什麼實際上是正確的。它看起來像portalIDuserIdnull或空字符串""。但有更簡單的方法可以逃脫 - 如果您使用@"some \ string",那麼您唯一需要轉義的方法是"""

例子:

string userID = "17"; 
string portalID = "0"; 
string folderName = "c:\\DotNetNuke 8.0\\Portals\\" + portalID + "\\Users\\0" + userID + "\\" + userID + "\\" + userID; 

c:\DotNetNuke 8.0\Portals\0\Users\017\17\17 

一樣:

string folderName = @"c:\DotNetNuke 8.0\Portals\" + portalID + @"\Users\0" + userID + @"\" + userID + @"\" + userID; 

一樣:

string folderName = [email protected]"c:\DotNetNuke 8.0\Portals\{portalID}\Users\0{userID}\{userID}\{userID}"; 
+0

你的第二個例子就像一個魅力。我不明白爲什麼\\沒有做到這一點。謝謝! –

4

最好的辦法是使用Path.Combine方法,像這樣:

string userID = "testuser"; 
string portalID = "portal"; 
var path = Path.Combine(@"c:\DotNetNuke 8.0\Portals", portalID, "Users", "0" + userID, userID, userID); 

Console.WriteLine(path); 

結果將是

c:\DotNetNuke 8.0\Portals\portal\Users\0testuser\testuser\testuser 

要了解更多關於Path.Combine檢查MSDN documentation