正在对C#中的目录字符进行转义
本文关键字:字符 转义 | 更新日期: 2023-09-27 18:19:56
我需要对我拥有的字符串中的字符进行转义,该字符串的内容是C:''blablabla'blabla''bla''SQL.exe
到C:'blablabla'blabla'bla'SQL.exe
,这样我就可以抛出基于该SQL.exe文件的进程。
我试过使用Mystring.Replace("''", @"'");
和Mystring.Replace(@"''", @"'");
,但都不起作用。
我怎么能这么做?
已编辑:已更正字符串中的类型。
我强烈怀疑您在Visual Studio调试器中查看这个输入字符串,并自欺欺人地认为实际上有2个'
,而实际上没有。这就是为什么尝试用'
替换''
没有任何作用的原因,因为在原始字符串中没有出现''
。由于您在调试器中再次查看输出,因此您又一次自欺欺人地认为有2个'
。
Visual Studio调试器有这种转义字符串的倾向。将其记录到文件或打印到控制台,您会看到输入字符串中只有一个'
,不需要替换任何内容。
看起来您正试图用单反斜杠(@"'"
)替换字符串中的双反斜杠(@"''"
)。如果是,请尝试以下
Mystring = Mystring.Replace(@"''", @"'");
注意:您确定字符串甚至包含双反斜杠吗?某些环境会将单个反斜杠打印为双斜杠(例如调试器)。你的评论提到我的方法不起作用。这是一个标志,表明字符串中实际上没有双反斜杠(否则会起作用)。
@
字符将字符串指定为逐字逐句的文字字符串,但这是在构造字符串时。如果使用Mystring.Replace("''", @"'")
,那么基本上不会替换任何内容,因为这两个字符串是相同的。
如果你想要一个没有转义符的字符串,那么用来定义它
string path = @"C:'Some'Directory'And'File.txt";
或者,您可以将''
替换为/
,如下所示:
path = path.Replace('''', '/');
值得注意的是,正如Darin Dimitrov所提到的,包含两个'
字符的字符串可能只是字符串的显示(即使用调试器时),而不是字符串的实际值。
我认为OP正在询问如何在文件路径中转义'''',如果是这样的话,因为OP没有提到他试图在哪里使用它。所以我在猜测。
然后使用Path.Combine()方法获取FileName路径。
Path.Combine()文档
您在哪里看到这个输出?因为它可能是您所期望的字符串,但通过调试器、输出窗口等查看值是对斜杠的转义
使用类似于的东西
myStr = myStr.Replace(@"''", @"'");
请确保将Replace方法的结果指定给myStr。否则它将失效;)
尝试在需要的地方添加"|DataDirectory|''MyFile.xyz"。它可以与连接字符串一起使用,也可以与其他东西一起使用(我还没有真正尝试将它应用于其他东西)。
我不明白你想要什么,如果你只想获得文件名(转义目录字符),你可以尝试:
string fileName = Path.GetFileName(YourString)
诺洛曼。。。。当您连接目录时,您可能在连接目录时缺少一个"''"。。我假设您正在尝试加入目录+某个子目录@noloman请记住,在C#中,"C:''Temp"是这样写的,"C:'' Temp"或@"C:'' Temp"一个是Literal,另一个是如何用传统的编码方式表示"''",因为"''"是转义符,在处理目录时,我们用"''"表示所有路径和子路径因此,也许通过替换"''",你真的把你自己预期的过程搞砸了
Mystring = Mystring.Replace(@"''", @"'");
应该为你工作,除非你真的想做Mystring=Mystring.Replace(@"''","''");如果您认为您希望使用"''"来构建目录。。那么它当然不会起作用。。因为您刚刚用返回字符替换了反斜杠。。我希望这对你有意义。。
System.IO.Directory.GetCurrentDirectory();您正在使用的也是一个问题。。SQL Server不是运行代码的应用程序。。它是您的.NET应用程序,因此您需要将SQL Server的位置放入变量app.config、web.config等中。。。请编辑您的问题,并将您用来做您想做的事情的代码粘贴到SQL Server代码中。。你可能想看看"你想做一些类似Process.Start(…)的事情吗?",意思是文件名。。?