0
using System;
using System.Diagnostics;
using System.Collections;
using System.Management;
using System.IO;

FileStream ostrm;
    StreamWriter writer;
    TextWriter oldOut = Console.Out;
    try
    {
        ostrm = new FileStream ("./Output.txt", FileMode.OpenOrCreate, FileAccess.Write);
        writer = new StreamWriter (ostrm);
    }
    catch (Exception e)
    {
        Console.WriteLine("Cannot open Output for writing");
        Console.WriteLine(e.Message);
        return;
    }
    foreach (ManagementObject envVar in searcher.Get())
    {
        Console.WriteLine("Username: {0}", envVar["Name"]);
    }
    Console.SetOut (writer);
    foreach (ManagementObject envVar in searcher.Get())
    {
        Console.WriteLine("Username: {0}", envVar["Name"]);
    }
    Console.SetOut (oldOut);
    writer.Close();
    ostrm.Close();
Console.WriteLine("" +
Environment.NewLine + "Press any key to exit");
Console.ReadLine();

私はコンソール アプリケーションにこのコードを持っています。ネットワーク上のすべてのユーザーの書き込みを完了するには AGES が必要です。いずれかの段階で中断されると、Output.txt は空になります。何かが起こった場合にテキスト ファイルにユーザー名が含まれるように、定期的に保存する方法はありますか?

どんな助けでも大歓迎です。

4

2 に答える 2

2

試しましたConsole.Out.Flush();か?

于 2012-11-02T05:22:14.730 に答える
0

プログラムは同じ仕事を 2 回行っているようです。また、リダイレクトする代わりに、次のようにConsole.Out使用してみてください。File.AppendAllText

foreach (ManagementObject envVar in searcher.Get()) {
    string str = string.Format("Username: {0}\r\n", envVar["Name"]);
    File.AppendAllText("./Output.txt", str);
}

AppendAllText は、書き込みごとにファイルを開いたり閉じたりするため、遅くなる可能性がありますが、はるかに信頼性が高くなります。

于 2012-11-02T05:31:27.353 に答える