C # TextWriterTraceListener последние строки отсутствуют в файле - PullRequest
0 голосов
/ 23 марта 2011

Есть ли способ ждать, когда слушатель закончит запись в файл.Прямо сейчас половина данных обрезана.Я думаю, потому что TextWriterTraceListener не удается записать данные в файл до закрытия приложения.

    static void Main(string[] args)
    {
        Stopwatch stopwatch = new Stopwatch();

        // Begin timing
        stopwatch.Start();

        try
        {
            Trace.Listeners.Add(new ConsoleTraceListener(false));

            Trace.WriteLine(" ");
            Trace.WriteLine(DateTime.Now);
            Trace.WriteLine("Starting application...");
            Trace.WriteLine("-----------------------------------------------------------");
            Trace.WriteLine("Elapsed ms | Task information");
            Trace.WriteLine("-----------------------------------------------------------");
            Console.ForegroundColor = ConsoleColor.Green;

            foreach (int i in Enumerable.Range(1, 3))
            {
                Trace.WriteLine("Keypair nr: " + i);
                Trace.WriteLine(stopwatch.ElapsedMilliseconds + "ms | Starting to generate bytes for wrapping key..");
                byte[] keyBytes = generateKeyBytes();
                Trace.WriteLine(stopwatch.ElapsedMilliseconds + "ms | ..generation finished.");
                Trace.WriteLine(stopwatch.ElapsedMilliseconds + "ms | Executing java to generate private and public keys..");
                string keysString = runJava(keyBytes);
                Trace.WriteLine(stopwatch.ElapsedMilliseconds + "ms | ..generation finished.");
                string[] keys = keysString.Split(',');

                byte[] pubKey = Convert.FromBase64String(keys[0]);
                byte[] wrappedKey = Convert.FromBase64String(keys[1]);

                Trace.WriteLine(stopwatch.ElapsedMilliseconds + "ms | Decrypting the private key..");
                byte[] privKey = Decrypt(wrappedKey, keyBytes);
                Trace.WriteLine(stopwatch.ElapsedMilliseconds + "ms | ..decryption finished.");

                Trace.WriteLine("Public Key:\n\r" + BitConverter.ToString(pubKey));
                Trace.WriteLine("Private Key:\n\r" + BitConverter.ToString(privKey));
            }
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Trace.WriteLine("From: " + ex.Source + ".\nDetail: "+ ex.Message);
        }
        finally
        {
            Trace.WriteLine("Total Elapsed time: " + stopwatch.Elapsed);
            stopwatch.Stop();
            Console.WriteLine("Any key to exit..");
            Console.ReadKey();
        }
    }

Добавлен мой код.И в файле конфигурации у меня есть:

<system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="myListener"
          type="System.Diagnostics.TextWriterTraceListener"
          initializeData="output.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>

Последний распечатанный байтовый массив обрезается, и строки из блока finnaly также отсутствуют в файле output.log, но все же они появляются на консоли.1007 *

1 Ответ

4 голосов
/ 23 марта 2011

Классы Trace и Debug имеют члены Flush, Close и AutoFlush.Вам нужно использовать хотя бы один из них.То, что ConsoleListener работает без них, случайно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...