2

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

国外的程序基本上做一件事:

程序.exe --input:foo.txt --output:bar.txt

我想知道...我可以在我的“对象”中用字符串 [] 替换 foo.txt 和 bar.txt。

而不是从文本文件中提取信息,并将其放入一个新的文本文件中......我想从我拥有的变量中提取信息......进入另一个我将制作的变量。

基本上,我试图通过从一个变量到另一个变量的管道来保存创建两堆文件的过程。我只是不确定如何去做。

我现在拥有的(在大多数情况下,去除了一些绒毛):

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;
}

我想将 lf.schema (字符串变量)作为输入......并创建类似 lf.ufd 的东西作为输出

4

2 回答 2

0

如果program.exe期望读取和写入磁盘上的文件,并且通过其命令行获取这些文件的名称,则您无法进行任何时髦的重定向来实现它。

如果应用程序有其他参数,你可以设置它来告诉它接受输入并将其输出返回到控制台,而不是文件,那么你应该能够做一些事情。根据您当前问题中的详细信息,您可能不走运。

于 2010-08-26T23:30:47.787 回答
0

如果程序没有办法指定“从标准输入读取并写入标准输出”,那么您将无法轻松解决您的问题。然而,这可能的,但它需要一些非常低级的东西;基本上你会使用Detours之类的东西来 hook CreateFile,并在它看到特殊文件名时使其附加到管道上。ReadFileWriteFile并且CloseHandle不需要重定向,因为它们与管道以及文件句柄一起使用。

这是一个重要的解决方案,但如果您有 Win32 API 经验,即使您事先不了解 Detours,也可以在几个小时内完成。

于 2010-08-26T23:53:27.333 回答