正在对C#中的目录字符进行转义

本文关键字:字符 转义 | 更新日期: 2023-09-27 18:19:56

我需要对我拥有的字符串中的字符进行转义,该字符串的内容是C:''blablabla'blabla''bla''SQL.exeC:'blablabla'blabla'bla'SQL.exe,这样我就可以抛出基于该SQL.exe文件的进程。

我试过使用Mystring.Replace("''", @"'");Mystring.Replace(@"''", @"'");,但都不起作用。

我怎么能这么做?

已编辑:已更正字符串中的类型。

正在对C#中的目录字符进行转义

我强烈怀疑您在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(…)的事情吗?",意思是文件名。。?