2017-07-28 91 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

相关问题