Как сохранить StringBuilder для добавления дважды в одну строку - PullRequest
0 голосов
/ 06 декабря 2018

Я использую StringBuilder и File.AppendAllText, чтобы создать журнал для моего приложения.Но я не могу понять, почему он всегда запускает одну и ту же строку дважды - за исключением несколько разных миллисекунд.Я поставил два sb.Clear() Вот мой код.Я что-то упускаю, чего не могу найти?

if (_bRealLog == true)
{
    StringBuilder sb = new StringBuilder();
    sb.Clear();
    if (_bAppend == true)
    {
        sb.AppendLine();
    }
    sb.Append($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss,FFF")} [SY] {_szLabel} {_szLogMessage}");
    File.AppendAllText(Properties.Settings.Default.szDirectoryPath + "\\" + "log.log", sb.ToString());
    sb.Clear();
}

[РЕДАКТИРОВАТЬ]

Что я получаю, это

2018-12-06 15:36:08,585 [SY] INFO   Node aquisition and loading of cables
2018-12-06 15:36:08,589 [SY] INFO   Node aquisition and loading of cables
2018-12-06 15:36:30,414 [SY] NOTICE 43 cables are loaded
2018-12-06 15:36:30,419 [SY] NOTICE 43 cables are loaded

Когда я должен получить это

2018-12-06 15:36:08,585 [SY] INFO   Node aquisition and loading of cables
2018-12-06 15:36:30,414 [SY] NOTICE 43 cables are loaded

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Я нашел свою проблему, которая была довольно глупой на самом деле.Я поставил условие для InvokeRequired и поместил часть журнала вне условия else, что, очевидно, заставило его работать дважды.Спасибо и извините за ваше время, это очень ценится.

 public void WriteLog(string _szMessage, bool _bRealLog, bool _bAppend = true, string _szLogMessage = "", string _szLabel = "")
    {
        if (this.rtbLogs.InvokeRequired)
        {
            PrintLogDelegate d = new PrintLogDelegate(WriteLog);
            this.Invoke(d, new object[] { _szMessage, _bRealLog, _bAppend, _szLogMessage, _szLabel });
        }
        else
        {
            if (String.IsNullOrEmpty(rtbLogs.Text))
            {
                rtbLogs.AppendText($"{_szMessage}");
                rtbLogs.ScrollToCaret();
            }
            else
            {
                rtbLogs.AppendText(Environment.NewLine + $"{_szMessage}");
                rtbLogs.ScrollToCaret();
            }

            if (_bRealLog == true)
            {
                StringBuilder sb = new StringBuilder();
                sb.Clear();
                if (_bAppend == true)
                {
                    sb.AppendLine();
                }
                sb.Append($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss,FFF")} [SY] {_szLabel} {_szLogMessage}");
                File.AppendAllText(Properties.Settings.Default.szDirectoryPath + "\\" + "log.log", sb.ToString());
                sb.Clear();
            }
        }
    }
0 голосов
/ 06 декабря 2018

Я не вижу в этом коде ничего, что могло бы дублировать строку.Вы должны запустить этот блок кода дважды.Установите точку останова сразу после File.AppendAllText() и откройте текстовый файл, чтобы увидеть, есть ли строка дважды перед возобновлением.

...