2

現在、私のアプリケーションは 1 つまたは複数のテキスト ファイルを取り込み、それらを別のファイル タイプに解析してディスクに配置します。次に、2 番目のプログラム (私のものではない) を呼び出して、そのテキスト ファイルを 3 番目のプログラムに処理します。

外部プログラムは基本的に 1 つのことを行います。

program.exe --input:foo.txt --output:bar.txt

私が知りたいことは... "オブジェクト" で foo.txt と bar.txt を string[] に置き換えることはできますか?

テキスト ファイルから情報を取得して新しいテキスト ファイルに出力するのではなく、自分が持っている変数から情報を取得したいのです... 別の変数に作成します。

基本的に、ある変数から別の変数にパイプすることで、ファイルの 2 つのスタックを作成するプロセスを保存しようとしています。どうすればいいのかわからないだけです。

私が今持っているもの(ほとんどの場合、いくつかの綿毛が取り除かれています):

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

プログラムに「stdinからの読み取りとstdoutへの書き込み」を指定する方法がない場合、問題を簡単に解決することはできません。ただし、それ可能ですが、かなり低レベルのものが必要になります。基本的には、 Detoursのようなものを使用してフックCreateFileし、特別なファイル名が表示されたときにパイプに接続します。ReadFileWriteFileおよびCloseHandleファイルハンドルだけでなくパイプでも機能するため、リダイレクトは必要ありません。

これは簡単な解決策ではありませんが、Win32 APIの経験がある場合は、迂回路の予備知識がなくても、数時間以内に実行できます。

于 2010-08-26T23:53:27.333 に答える
0

がディスク上のファイルprogram.exeを読み書きすることを期待しており、それらのファイルの名前をコマンド ライン経由で取得している場合、それ以外の方法でファンキーなリダイレクトを行うことはできません。

アプリに、ファイルではなくパイプで入力を受け取り、その出力をコンソールに返すように設定できる他のパラメーターがある場合は、何かを実行できるはずです。現在あなたの質問にある詳細に基づいて、あなたはおそらく運が悪いでしょう。

于 2010-08-26T23:30:47.787 に答える