Russian Qt Forum
Ноябрь 25, 2024, 18:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сохранение лог-файлов.  (Прочитано 6790 раз)
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", но это приводит к записи не читаемого символа в лог-файл. При просмотре его мощным текстовым процессором все строки начинаются с новой строки, а при просмотре блокнотом все-равно все в кучу Грустный

Помогите неопытному.
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #1 : Февраль 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();
        }
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
JamS007
Гость
« Ответ #2 : Февраль 17, 2010, 22:09 »

К сожалению. "endl" и '\n' это одно и тоже. На всякий случай я скомпилировал Ваш вариант, но он оказался аналогом моего.
Записан
MoPDoBoPoT
Гость
« Ответ #3 : Февраль 17, 2010, 22:12 »

Код
C++ (Qt)
out << errorString << "\r\n";
 
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #4 : Февраль 17, 2010, 23:10 »

Скинь вложением файл который получается слитным - вдруг твой блокнот глючит?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Февраль 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.
Записан

Юра.
Gorin
Гость
« Ответ #6 : Февраль 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());
}
Записан
voronElf
Гость
« Ответ #7 : Февраль 18, 2010, 07:32 »

break, блокнот не глючит (хотя лучше сказать что он так глючит у всех  Улыбающийся ).

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


Страница сгенерирована за 0.099 секунд. Запросов: 23.