Russian Qt Forum

Qt => Общие вопросы => Тема начата: JamS007 от Февраль 17, 2010, 21:09



Название: Сохранение лог-файлов.
Отправлено: JamS007 от Февраль 17, 2010, 21:09
Здравствуйте,

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

Код:
QFile file("Logs\\"+logFileName);
        if (file.open(QIODevice::Append))
        {
            QTextStream out(&file);
            out.setFieldAlignment(QTextStream::AlignLeft);
            out << errorString <<endl;
            file.close();
        }

код работает, но не совсем так, как нужно.

1. Весь текст записывается в файл слитно. То есть, при просмотре блокнотом видно, что все строки начинаются в конце предыдущей. А мне нужно, чтоб каждая запись в лог начиналась с новой строки. Я пробовал дописывать "endl", но это приводит к записи не читаемого символа в лог-файл. При просмотре его мощным текстовым процессором все строки начинаются с новой строки, а при просмотре блокнотом все-равно все в кучу :(

Помогите неопытному.


Название: Re: Сохранение лог-файлов.
Отправлено: panAlexey от Февраль 17, 2010, 21:56

Код:
QFile file("Logs\\"+logFileName);
        if (file.open(QIODevice::Append))
        {
            QTextStream out(&file);
            out.setFieldAlignment(QTextStream::AlignLeft);
            out << errorString <<'\n'<<endl;
            file.close();
        }


Название: Re: Сохранение лог-файлов.
Отправлено: JamS007 от Февраль 17, 2010, 22:09
К сожалению. "endl" и '\n' это одно и тоже. На всякий случай я скомпилировал Ваш вариант, но он оказался аналогом моего.


Название: Re: Сохранение лог-файлов.
Отправлено: MoPDoBoPoT от Февраль 17, 2010, 22:12
Код
C++ (Qt)
out << errorString << "\r\n";
 


Название: Re: Сохранение лог-файлов.
Отправлено: break от Февраль 17, 2010, 23:10
Скинь вложением файл который получается слитным - вдруг твой блокнот глючит?


Название: Re: Сохранение лог-файлов.
Отправлено: lit-uriy от Февраль 18, 2010, 03:39
Проблема в этой строке:
Код:
file.open(QIODevice::Append)
не указан флаг текстового режима.
Из асистента:
Цитировать
QTextStream & endl ( QTextStream & stream )
Writes '\n' to the stream and flushes the stream.

Equivalent to

 stream << '\n' << flush;
Note: On Windows, all '\n' characters are written as '\r\n' if QTextStream's device or string is opened using the QIODevice::Text flag.

See also flush(), reset(), and QTextStream manipulators.


Название: Re: Сохранение лог-файлов.
Отправлено: Gorin от Февраль 18, 2010, 07:23
Мой рабочий код для сохранения логов:
Код:
void dialogTestDet::saveLog(const QString &datastr)
{
if (!logfile)
{
logfile = new QFile("reztest.log");
if (!logfile->open(QIODevice::Append | QIODevice::Text))
{
qDebug()<<"Fail "<<logfile->fileName()<<" not open";
return;
}
else
logfile->write(("\n"+QDate::currentDate().toString("dd.MM.yyyy")).toLocal8Bit());
}
if (!logfile->isOpen())
return;
logfile->write(datastr.toLocal8Bit());
}


Название: Re: Сохранение лог-файлов.
Отправлено: voronElf от Февраль 18, 2010, 07:32
break, блокнот не глючит (хотя лучше сказать что он так глючит у всех  :) ).

Вариант от MoPDoBoPoT прокатит, но эт ручками, а используемый lit-uriy и Gorin с флагом  QIODevice::Text универсальнее в плане кроссплатформенности: из-за флага при записи происходит замена '\n' на "\n\r" только под виндой.