代码之家  ›  专栏  ›  技术社区  ›  confusedMind

将参数发送到控制台应用程序并返回字符串数组

  •  1
  • confusedMind  · 技术社区  · 13 年前

    我将电子邮件正文作为参数发送到控制台应用程序,问题是我只看到前4个字符 <div 在控制台应用程序上,其他部分会发生什么?我可以将html电子邮件文本作为参数发送到控制台应用程序吗?还有什么方法可以从控制台应用程序返回字符串[]数组吗?

    到目前为止,我的代码如下:

    TestingConsoleApp 要检查发送和接收:

    static void Main(string[] args)
    {
            string emailBody = System.IO.File.ReadAllText(@"C:\Users\ehsankayani\Desktop\email1Html.txt");
            CallProcess(emailBody);
    }
    
    static void CallProcess(string body)
    {
           string path = @"F:\Scrappers\emailParser_app\emailParser_app\bin\Debug\emailParser_app.exe";
           Process.Start(path, body);
    }
    

    主控制台应用程序:

    static void Main(string[] args)
    {
                Console.WriteLine("EMAIL BODY = ");
                string[] dataToReturn = new string[8];
                //string emailBody = System.IO.File.ReadAllText(@"C:\Users\ehsankayani\Desktop\email1Html.txt");
                string emailBody = args[0];
                Console.WriteLine(emailBody);
                Console.WriteLine(emailBody.Length);
                Console.ReadLine();
                var doc = new HtmlAgilityPack.HtmlDocument();
                doc.LoadHtml(emailBody);
    }
    

    有什么建议吗?

    3 回复  |  直到 13 年前
        1
  •  2
  •   David Arno    13 年前

    您正在传递body作为CallProcess中的参数集。所以如果身体是

    xxxx yyyy ....
    

    那么args[0]将仅仅是xxxx。你需要把“”放在文本周围,并在文本中转义。

    不过,一个更好的解决方案是将进程设置为重定向stdin,并将主体写入进程的stdin。这样可以避免空格和引号的问题。看看 http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardinput.aspx 了解有关此操作的详细信息。

        2
  •  1
  •   confusedMind    13 年前

    发送时使用简单的HttpUtility.EncodeHtml(电子邮件正文),接收时使用HttpUtility.DodeHtml。

        3
  •  0
  •   JensG    13 年前

    既然您征求建议:对于复杂和/或大数据,我宁愿只将查找数据的信息传递给被调用的进程。对于返回的数据也可以这样做

    这有几个积极的影响,这些数据越复杂、越大:你不必确保数据与命令行限制相匹配,你不必在两个进程中分配大量内存来编码/解码数据,也不需要实现这样做的逻辑。相反,将数据写入文件、共享内存区域(MMF)等,然后传递该地址。

    几乎唯一的缺点是你必须考虑谁负责清理。

    另一种可能的方法可能涉及进程间通信,但我认为这有点过头了。