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

C#:变量字符串的外部EXE输入/输出管道

  •  2
  • WernerCD  · 技术社区  · 14 年前

    目前,我的应用程序接收一个文本文件,将它们解析为另一种文件类型并将它们放到磁盘上。然后我调用一个辅助程序(不是我的)将该文本文件处理为第三个。

    我想知道的是。。。我能换一下吗foo.txt文件以及条形图.txt在我的“object”中有字符串[]。

    而不是从文本文件中提取信息,然后放入新的文本文件中。。。我想从变量中提取信息。。。变成另一个变量。

    基本上,我试图保存创建两个文件堆栈的过程,通过管道将一个变量输出到另一个变量。我只是不知道该怎么办。

    我现在所拥有的(大部分情况下,除去一些绒毛):

    public bool _Out_Schema(string output)
    {
        clear(output);                                      // clear output directory
    
        // Assign schema name to path
        string path = output + '\\' + lf.filename + ".schema";
        using (StreamWriter SW = new StreamWriter(path))
        {
            SW.Write(lf._schema);
        }                
        return true;
    }
    
    public bool _Out_UFD(string input, string output)
    {
        clear(output);                                      // clear output directory
    
        ProcessStartInfo SI = new ProcessStartInfo();
        SI.CreateNoWindow = true;
        SI.WindowStyle = ProcessWindowStyle.Hidden;
        SI.FileName = "ufdschema.exe";                      // foreign program
    
        SI.Arguments = String.Format("--ischema={0}\\{2}.schema --oufd={1}\\{2}.ufd", input, output, (FI.Name.Split('.'))[0]);
        using (Process P = Process.Start(SI)) { P.WaitForExit(); }
    
        return true;
    }
    

    我想坐飞机左前架构(字符串变量)作为输入。。。创造一些类似低频ufd作为输出

    2 回复  |  直到 14 年前
        1
  •  0
  •   snemarch    14 年前

    如果程序没有指定“从stdin读取并写入stdout”的方法,则不能 解决你的问题。它 然而,这是可能的,但是它需要一些相当低级的东西;基本上你会使用 Detours 钩住 CreateFile ReadFile , WriteFile CloseHandle 不需要重定向,因为它们使用管道和文件句柄。

    这是一个不平凡的解决方案,但如果您有Win32 API的经验,它是可行的,在几个小时内,即使您事先没有知识的迂回。

        2
  •  0
  •   Rob    14 年前

    program.exe 期望读取和写入磁盘上的文件,并通过其命令行获取这些文件的名称。否则,您无法执行任何怪异的重定向。