トップページに戻る    次のC#のサンプルへ    前のC#のサンプルへ

7-12 exeを実行し、実行結果をテキストファイルに出力

C#のサンプル

exeのフルパスを複数指定して、
更新日時が最新のexeを実行し、実行結果をテキストファイルに出力するツールです。

Printfデバッグする時に使います。

英語名称は、WriteOutToText


ソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    // 対象exeのフルパスリスト
    static List<string> mExeFullPathList =
        new List<string>() { @"exeのフルパスその1",
                             @"exeのフルパスその2"};

    private const string PathEmEditor = @"C:\Program Files\EmEditor\EmEditor.exe"; // EmEditor

    static void Main()
    {
        var Query = mExeFullPathList.OrderByDescending(
            pX => System.IO.File.GetLastWriteTime(pX));

        // exeの更新日時の新しいほうを実行
        string ExecExeFullpath = Query.First();

        var InsProcessStartInfo = new System.Diagnostics.ProcessStartInfo();
        InsProcessStartInfo.FileName = ExecExeFullpath; // 実行するファイル
        InsProcessStartInfo.CreateNoWindow = true; // コンソール・ウィンドウを開かない
        InsProcessStartInfo.UseShellExecute = false; // シェル機能を使用しない
        InsProcessStartInfo.RedirectStandardOutput = true; // 標準出力をリダイレクト

        // Exeの実行開始
        System.Diagnostics.Process InsProcess = System.Diagnostics.Process.Start(InsProcessStartInfo);
        string RedirectStr = InsProcess.StandardOutput.ReadToEnd(); // 標準出力の読み取り

        WriteTextAndOpen(RedirectStr);
    }

    // String型を引数として、テキストファイルに出力して開く
    static void WriteTextAndOpen(string pRedirectStr)
    {
        string FileName = DateTime.Now.ToString("yyyy年MM月dd日HH時mm分ss秒") + ".txt";
        string OutFilePath = System.IO.Path.Combine(getWorkFolder(), FileName);

        System.Text.Encoding enc = new System.Text.UTF8Encoding(false);

        System.IO.File.WriteAllText(OutFilePath, pRedirectStr, enc);

        var InsProcessStartInfo = new System.Diagnostics.ProcessStartInfo();
        InsProcessStartInfo.FileName = PathEmEditor;
        InsProcessStartInfo.Arguments = OutFilePath + " /cp 65001"; // UTF8を指定
        InsProcessStartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Maximized;
        System.Diagnostics.Process.Start(InsProcessStartInfo);
    }

    // Dドライブが無かったらCドライブを使う
    static private string getWorkFolder()
    {
        return System.IO.Directory.Exists(@"D:\WorkFile\") ? @"D:\WorkFile\" : @"C:\WorkFile\";
    }
}