c# - 字符串中不需要的转义字符

标签 c# escaping character

App.Config 文件内容:

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>

    <appSettings>
        <add key="ConnectionString"
             value="Server=ADVDSQLMGA;User ID=ImporterApp;Password=!mp0rt3rApp;Database=id0405Moxy52"
             />


        <add key="DTS_PackageName"
            value="BlockImportNEW"/>
        <add key="DTS_PackagePathAndFileName"
            value="\\computername\foldername\folder1\folder2\folder3\filename.dts"/>
        <add key="DTS_PackageGUID"
            value="{C22A80D9-7613-43AF-939C-3C04AD7D848A}"/>
        <add key="DTS_ImportSourcePath"
            value="C:\foldername"/>
        <add key="DTS_ImportFileConnection"
             value="'filename.txt';'';'0'"/>
        <add key="DTS_ImportFileName"
             value="filename.txt"/>
        <add key="DTS_ImportWorkingPath"
             value="\\computername\foldername\folder1\folder2"/>
        <add key="DTS_ImportWorkingPathAndFileName"
             value="\\computername\foldername\folder1\folder2\filename.txt"/>
        <add key="DTS_DestinationServerName"
             value="computername"/>
        <add key="DTS_DestinationDatabase"
             value="databasename"/>
        <add key="DTS_DestinationTable"
             value="databasename.dbo.tablename"/>
        <add key="DTS_DestinationUserName"
             value="username"/>
        <add key="DTS_DestinationPassword"
             value="password"/>
    </appSettings>


</configuration>

代码:

            string DTS_PackageName = ConfigurationSettings.AppSettings["DTS_PackageName"];
            string DTS_PackagePathAndFileName = ConfigurationSettings.AppSettings["DTS_PackagePathAndFileName"];
            string DTS_PackageGUID = ConfigurationSettings.AppSettings["DTS_PackageGUID"];
            string DTS_ImportSourcePath = ConfigurationSettings.AppSettings["DTS_ImportSourcePath"];
            string DTS_ImportFileConnection = ConfigurationSettings.AppSettings["DTS_ImportFileConnection"];
            string DTS_ImportFileName = ConfigurationSettings.AppSettings["DTS_ImportFileName"];
            string DTS_ImportWorkingPath = ConfigurationSettings.AppSettings["DTS_ImportWorkingPath"];
            string DTS_ImportWorkingPathAndFileName = ConfigurationSettings.AppSettings["DTS_ImportWorkingPathAndFileName"];
            string DTS_DestinationServerName = ConfigurationSettings.AppSettings["DTS_DestinationServerName"];
            string DTS_DestinationDatabase = ConfigurationSettings.AppSettings["DTS_DestinationDatabase"];
            string DTS_DestinationTable = ConfigurationSettings.AppSettings["DTS_DestinationTable"];
            string DTS_DestinationUserName = ConfigurationSettings.AppSettings["DTS_DestinationUserName"];
            string DTS_DestinationPassword = ConfigurationSettings.AppSettings["DTS_DestinationPassword"];

            StringBuilder DTSArgs = new StringBuilder();

            DTSArgs.AppendFormat("/N \"{0}\" /G \"{1}\" /F \"{2}\" ",
                                        DTS_PackageName,
                                        DTS_PackageGUID,
                                        DTS_PackagePathAndFileName);            
            DTSArgs.AppendFormat(@"/A ""DestinationDatabase"":""8""=""{0}"" ", DTS_DestinationDatabase);
            DTSArgs.AppendFormat("/A \"DestinationPassword\":\"8\"=\"{0}\" ", DTS_DestinationPassword);
            DTSArgs.AppendFormat("/A \"DestinationServerName\":\"8\"=\"{0}\" ", DTS_DestinationServerName);
            DTSArgs.AppendFormat("/A \"DestinationTable\":\"8\"=\"{0}\" ", DTS_DestinationTable);
            DTSArgs.AppendFormat("/A \"DestinationUserName\":\"8\"=\"{0}\" ", DTS_DestinationUserName);
            DTSArgs.AppendFormat("/A \"ImportFileConnection\":\"8\"=\"{0}\" ", DTS_ImportFileConnection);
            DTSArgs.AppendFormat("/A \"ImportFileName\":\"8\"=\"{0}\" ", DTS_ImportFileName);
            DTSArgs.AppendFormat("/A \"ImportSourcePath\":\"8\"=\"{0}\" ", DTS_ImportSourcePath);
            DTSArgs.AppendFormat("/A \"ImportWorkingPath\":\"8\"=\"{0}\" ", DTS_ImportWorkingPath);
            DTSArgs.AppendFormat("/A \"ImportWorkingPathAndFileName\":\"8\"=\"{0}\" ", DTS_ImportWorkingPathAndFileName);
            DTSArgs.AppendFormat("/W \"0\"");

            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = "dtsrun ";
//**** PROBLEM IS HERE:  The DTSArgs escpaes the double-quotes and backslashes in paths with backslashes,
//**** then the dtsrun.exe doesn’t like the arguments (see string below)
            proc.StartInfo.Arguments = DTSArgs.ToString();

            proc.Start();

            proc.WaitForExit();

DTSARgs 的样子:

/N "BlockImportNEW" /G "{C22A80D9-7613-43AF-939C-3C04AD7D848A}" /F "\computername\foldername\folder1\folder2\folder3\filename.dts" /A "DestinationDatabase":"8"="DBNAME" /A "DestinationPassword":"8"="password" /A "DestinationServerName":"8"="ServerName" /A "DestinationTable":"8"="dbname.dbo.tablename" /A "DestinationUserName":"8"="userName" /A "ImportFileConnection":"8"="file.txt';'';'0'" /A "ImportFileName":"8"="file.txt" /A "ImportSourcePath":"8"="C:\BlockImport" /A "ImportWorkingPath":"8"="\computername\foldername\folder1\folder2" /A "ImportWorkingPathAndFileName":"8"="\computername\foldername\folder1\folder2\file.txt" /W "0"

proc.StartInfo.Arguments 的样子:

/N \"BlockImportNEW\" /G \"{C22A80D9-7613-43AF-939C-3C04AD7D848A}\" /F \"\\computername\foldername\folder1\folder2\folder3\filename.dts\" /A \"DestinationDatabase\":\"8\"=\"DBNAME\" /A \"DestinationPassword\":\"8\"=\"password\" /A \"DestinationServerName\":\"8\"=\"ServerName\" /A \"DestinationTable\":\"8\"=\"dbname.dbo.tablename\" /A \"DestinationUserName\":\"8\"=\"userName\" /A \"ImportFileConnection\":\"8\"=\"file.txt';'';'0'\" /A \"ImportFileName\":\"8\"=\"file.txt\" /A \"ImportSourcePath\":\"8\"=\"C:\BlockImport\" /A \"ImportWorkingPath\":\"8\"=\"\\computername\foldername\folder1\folder2\" /A \"ImportWorkingPathAndFileName\":\"8\"=\"\\computername\foldername\folder1\folder2\file.txt\" /W \"0\"

执行 proc.Start 时,由于所有额外的反斜杠,它无法正常工作。 似乎 DTSArgs stringbuilder 字符串的格式正确,但是当通过 .ToString() 转换并存储在 proc.StartInfo.Arguments 中时,它会得到所有反斜杠。

我怎样才能避免向 proc.StartInfo.Arguments 发送所有那些额外的反斜杠?

最佳答案

我强烈怀疑它们不在字符串中。您是否有机会使用调试器?它显示了字符串的转义形式。

将字符串写入控制台或类似的东西,你会看到真正的值(value)。

关于c# - 字符串中不需要的转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1867662/

相关文章:

c# - 通过C#生成表格(html表格)——如何生成 'th'标签?

c# - 转义 C# 字符串中的双引号

Python:json.loads 在转义时阻塞

javascript - 使用 Cordova 部署 android build 后出现错误字符

c# - datagridview 添加行

c# - TikTok api user/info/endpoint 返回错误代码 6007063

css - 我如何使用 CSS 为任何字形强制固定字符宽度,包括神秘的 Unicode?

python - 将字符串转换为单词数组 - Python

javascript - 在下拉列表中按选定区域限制搜索

regex - .htaccess mod_rewrite 中的百分号