Как проверить, открыт ли QFile?

#qt #qt5

#qt #qt5

Вопрос:

Я пытаюсь создать файл журнала для приложения. Я создал функцию для его создания:

 void MainWindow::Logs(){   QString nomlog = "log.txt";  logtxt = new QFile(nomlog);  logtxt-gt;open(QIODevice::WriteOnly | QIODevice::Text);   QTextStream out(logtxt);  out lt;lt; "This file is generated by Qtn";   QDesktopServices::openUrl(QUrl::fromLocalFile("log.txt"));  }  

Эта часть работает нормально, файл создан, с нужным текстом.

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

 void MainWindow::testconnect(){  logtxt = new QFile("log.txt");  if(logtxt-gt;isOpen()){  QTextStream out(logtxt);  out lt;lt; "Le fichier log a été ouvert !n";  }  else{  QMessageBox::information(this,"Echec","Le fichier log n'existe pas");  } }  

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

Я надеюсь, что это было ясно, извините, если это не так. Не могли бы вы помочь мне с этим, пожалуйста? Спасибо тебе!

Комментарии:

1. Но вы создаете второй QFile.

Ответ №1:

Проблема в том, что вы создаете второй QFile в своей testconnect функции. Попробуйте сохранить logtxt как переменную-член вместо того, чтобы постоянно ее воссоздавать. Таким образом, вы будете проверять один и тот же файл, чтобы узнать, открыт ли он.

Комментарии:

1. Танк тебе ! Я объявил об этом вместо этого в главном окне, и теперь это работает, это была действительно глупая ошибка… Мне потребовалось около часа, чтобы починить его, спасибо !

2. Рад помочь! Если это решило вашу проблему, пожалуйста, отметьте ответ как принятый.