通过Process.start将大字符串内容作为参数传递给exe

时间:2014-07-18 12:46:24

标签: .net string command-line-arguments process.start

我尝试使用命令行参数传递大量数据,但我只获得一行数据。我没有得到剩余的数据。

以下是发送程序的代码:

zpl = Printer.GetZPLString(json, true, true);
const string path = @"E:\karthik related\EXEC PROGRAMS\PrintServerHost\PrintServerHost\bin\Debug\PrintServerHost.exe";
string Ip = PrintersList[0].IPAddress.ToString();
string port = PrintersList[0].PortNumber.ToString();
string zp = zpl;
Process.Start(path, Ip + " " + port + " " + zp);

这是接收程序:

 private void Form1_Load(object sender, EventArgs e)
    {

        string[] args = Environment.GetCommandLineArgs();
        if (args.Length > 1)// && (args[1].StartsWith("/n")))
        {
            System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();
            client.Connect(args[1], Convert.ToInt16(args[2]));
            System.IO.StreamWriter writer = new System.IO.StreamWriter(client.GetStream());
            writer.Write(args[3]);
            writer.Flush();
            writer.Close();
            client.Close();
        }
    }

任何人都可以提出问题所在。

1 个答案:

答案 0 :(得分:1)

命令行参数不是传递数据的好方法,原因有两个:

  1. 对于Process.Start,最大命令行长度为2080个字符。 See here.

  2. 如果您的字符串包含空格,引号,反斜杠或类似内容,则会损坏。这些字符控制命令行的解析方式。 See here.

  3. 既然你说你只获得“单一数据”,那么你可能会遇到问题#2。您可以尝试转义所有有问题的字符,但这对长度限制没有帮助。最好使用临时文件传递数据。