Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
1

GUI Работа с текстовым файлом, лог файлом не мешая системе

01.09.2014, 17:56. Просмотров 1611. Ответов 11
Метки нет (Все метки)

Хочу написать прогу которая будет по таймеру искать в тхт - лог файле сообщение об ошибке. Например Error: 100
Qt C++ gui изучаю недавно прушу подсказывать, помогать.
И так что имею. Создал меню в нём выбираю файл и вывожу информацию о нём.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
void MainWindow::on_action_triggered() // меню Файл -  выбор файла
{
    QString str = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
    QFileInfo info1 (str);
    if (str!=0)
    {
        ui->label->setText("Имя файла: " + info1.fileName());
        ui->label_2->setText("Размер файла: " + QString::number(info1.size()/1024) + " Кб");
        ui->label_5->setText("Дата изменения: " + info1.lastModified().toString());
    }
}
Вроде работает! Правильно понимаю что сам файл не открывался, а выдало инфу по нему?
И всё ли правильно написано?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2014, 17:56
Ответы с готовыми решениями:

Можно ли программно поработать с файлом PageMaker'a, как с текстовым файлом?
Можно ли программно поработать с файлом PageMaker'a, как с текстовым файлом. Задача состоит в том,...

Работа с текстовым файлом
Необходимо каждую строчку упорядочить по алфавиту, т.е. все буквы «а» выносятся на первое место,...

Работа с текстовым файлом
Доброго времени суток, прошу вашего совета, начинаю не как все с "Hello, world", а сразу на...

Работа с текстовым файлом
В текстовом файле вычислить количество положительных чисел

11
1396 / 1253 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
01.09.2014, 18:22 2
QFileInfo получает данные от файловой системы, сам файл конечно же не открывается.
Но если вы хотите в нем что-то искать - то открывать все равно придется. По этому вопрос не совсем понятен.
0
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
02.09.2014, 10:41  [ТС] 3
RazrFalcon
открывать файл для чтения и поиска конечно буду но после поиска нужно будет закрыть. Это всё будет происходить по таймеру, например каждый час. По этому нужно чтобы выбранный файл оставался в памяти. Пока не придумал как будет отслеживаться если он найдёт то что ищем, выдаст сообщение, а через час он опять выдаст, что нашёл эту же ошибку.
всё же хотел проверить открыт ли файл прогой и не получается использовать QIODevice::isOpen()

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void MainWindow::on_action_triggered() // меню Файл -  выбор файла
{
      QString str = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
      QFileInfo info1 (str);
      QFile file(str);
      if (str!=0)
      {
          ui->label->setText("Имя файла: " + info1.fileName());
          ui->label_2->setText("Размер файла: " + QString::number(info1.size()/1024) + " Кб");
          ui->label_5->setText("Дата изменения: " + info1.lastModified().toString());
              if (file.open(QIODevice::isOpen())==true)
              {
                  ui->label_6->setText("Файл открыт");
                  }
              else ui->label_6->setText("Файл закрыт");
      }
      else QMessageBox::information(this, "Ошибка", "Для начала нужно выбрать файл");
      return;
 
}
Сейчас разбираюсь как этот файл открыть, читаю Макс Шлее.

Добавлено через 26 минут
вроде так работает
void MainWindow::on_action_triggered() // меню Файл - выбор файла
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
      QString str = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
      QFileInfo info1 (str);
      QFile file(str);
      if (str!=0)
      {
          ui->label->setText("Имя файла: " + info1.fileName());
          ui->label_2->setText("Размер файла: " + QString::number(info1.size()/1024) + " Кб");
          ui->label_5->setText("Дата изменения: " + info1.lastModified().toString());
          if (file.isOpen()==true)
          {
              ui->label_6->setText("Файл открыт");
              }
          else ui->label_6->setText("Файл закрыт");
      }
      else QMessageBox::information(this, "Ошибка", "Для начала нужно выбрать файл");
      return;
}
Добавлено через 11 минут
Теперь пытаюсь по кнопке спросить открыт ли файл и не получается
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void MainWindow::on_action_triggered() // меню Файл -  выбор файла
{
      QString str = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
      QFileInfo info1 (str);
      QFile file(str);
      if (str!=0)
      {
          ui->label->setText("Имя файла: " + info1.fileName());
          ui->label_2->setText("Размер файла: " + QString::number(info1.size()/1024) + " Кб");
          ui->label_5->setText("Дата изменения: " + info1.lastModified().toString());
      }
      else QMessageBox::information(this, "Ошибка", "Для начала нужно выбрать файл");
      return;
 
}
 
void MainWindow::on_pushButton_clicked() //Проверка открыт ли файл
{
    if (file.isOpen()==true)
    {
        ui->label_6->setText("Файл открыт");
        }
    else ui->label_6->setText("Файл закрыт");
}
Ругается на проверку file. Наверное он не считывает в переменную file с кнопки выбора файла.
Как передать переменной file этот файл?
0
594 / 394 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
02.09.2014, 12:57 4
ЧТобы открыть файл для чтения:
C++ (Qt)
1
2
3
4
5
if(file.open(QIODevice::ReadOnly))
{
     QByteArray data = file.readAll();
     file.close();
}
Имя файла лучше проверять:
if(!str.isEmpty())
0
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
02.09.2014, 13:23  [ТС] 5
alexey_rage
я пока его не открываю. По action_triggered() выбираю файл для последующие работы с ним.
даже если сделать отдельную кнопку о получении имени, размера и даты изменения то переменной file нужно как-то передать этот файл.
Алгоритм такой:
1) Вывожу диалог выбора файла. (именно выбираю, а не открываю файл)
2) Получаю имя, размер и т.д. этого файла (без открытия его)
3) Проверяю не открыт ли он моей прогой.
4) Открываю файл для чтения.
5) Проверяю открылся ли файл.
6) Делаю по файлу поиск.

Похоже нужно свою функцию прописать чтобы из любого места вызвать выбранный файл. Но как это делается не знаю.
В консольных вариантах знаю как пишутся функции, а как тут не знаю.
0
594 / 394 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
02.09.2014, 13:56 6
Цитата Сообщение от Aleksei Посмотреть сообщение
3) Проверяю не открыт ли он моей прогой.
Вы создаете QFile file; внутри метода on_action_triggered(). Соответственно переменная file видна только(!) внутри этого метода!
Метод on_pushButton_clicked() не знает ничего о переменной file. Для этого метода она не объявлена.
Переменнюю файл нужно делать глобальной для класса MainWindow. Тогда она будет видна из любого метода внутри класса.
0
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
02.09.2014, 14:08  [ТС] 7
А где это делается? в этом же файле mainwindow.ccp перед
C++ (Qt)
1
2
3
4
MainWindow::~MainWindow()
{
    delete ui;
}
я так понимаю свою функцию нужно написать, но где и как?
какой нибудь пример передачи одной переменной для разных методов (кнопок)
0
594 / 394 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
02.09.2014, 14:47 8
Цитата Сообщение от Aleksei Посмотреть сообщение
А где это делается?
В MainWindow.h после объявления класса
C++ (Qt)
1
2
3
4
5
6
class MainWindow : public QMainWindow
{
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
};
В любом месте между { и }; можно объявлять глобальные переменные, которые будут видны из любого метолда данного класса.

Не по теме:

Уважаемый, ну почитайте же вы уже литературу!
Ну почему вам приходится объяснять элементарные вещи?
Возьмите какую-нибудь книжку по C++ и ООП и почитайте какие бывают переменные, какие меременные являются глобальными и т.д.
Ну ни куда без этого! Это все равно, что начинать изучать высшую математеку не зная таблицы умножения!

1
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
02.09.2014, 22:25  [ТС] 9
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void MainWindow::on_pushButton_clicked()    //выбор файла
{
    QString str = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
    QFile file (str);
}
 
void MainWindow::on_pushButton_2_clicked()     //свойства файла
{
       QFileInfo info1 (file);
       ui->label->setText("Имя файла: " + info1.fileName());
       ui->label_2->setText("Размер файла: " + QString::number(info1.size()/1024) + " Кб");
       ui->label_3->setText("Дата изменения: " + info1.lastModified().toString());
}
я понимаю что задача простая, поэтому и прощу помощи. ООП проходил давно и на консоле.
подскажите что и где нужно написать в файл mainwindow.h и в файл mainwindow.cpp что бы к переменной file появился доступ от всех кнопок (методов). ПЛИЗ...

Добавлено через 5 часов 24 минуты
Я правильно понимаю что тут нет функций как в консольном с++
Тут нужно копать сигналы и слоты?
0
1396 / 1253 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
02.09.2014, 22:45 10
Цитата Сообщение от Aleksei Посмотреть сообщение
Я правильно понимаю что тут нет функций как в консольном с++
Тут нужно копать сигналы и слоты?
Неправильно.
Нет такого понятия как "консольный С++" - С++ один для всех.
0
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
04.09.2014, 22:15  [ТС] 11
разобрался немного с функциями
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
void MainWindow::on_action_1_triggered()
{
    mFile = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
    if(!mFile.isEmpty())
    {
     ui->statusBar->showMessage("Выбран файл",1500);
     ui->svoistvaButton->setEnabled(true);
    }
    else QMessageBox::information(this, "Ошибка", "Для начала нужно выбрать файл");
    return;
 
}
 
void MainWindow::on_svoistvaButton_clicked()
{
    QFileInfo info(mFile);
    ui->label->setText("Имя файла: " + info.fileName());
    ui->label_2->setText("Размер файла: " + QString::number(info.size()/1024) + " Кб");
    ui->label_3->setText("Дата изменения: " + info.lastModified().toString());
}
 
void MainWindow::on_pushButton_2_clicked()
{
    QFile oFile(mFile);
    if(!oFile.open(QFile::ReadOnly | QFile::Text))
    {
       QMessageBox::information(this, "Ошибка", "Ошибка открытия для чтения");
       return;
    }
    QTextStream stream(&oFile);
    QString buffer = stream.readAll();
    ui->textEdit->setText(buffer);
}
void MainWindow::on_pushButton_3_clicked()
{
    QFile cFile(mFile);
    cFile.close();
}
void MainWindow::on_pushButton_clicked()
{
    QFile iFile(mFile);
    if (iFile.open(QFile::isOpen())==true)
        {
          ui->statusBar->showMessage("Файл открыт",1500);
        }
    else ui->statusBar->showMessage("Файл закрыт",1500);
}
 
void MainWindow::on_action_2_triggered()
{
    close();
}
проверка открыт ли файл не работает if (iFile.open(QFile::isOpen())==true) ругается на эту строчку.
если писать if (iFile.isOpen()== true) тоже не работает. Запускается без ошибки но результат всегда закрыт файл.
0
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
06.09.2014, 00:36  [ТС] 12
Задача решена, по поиску в файле создам отдельную тему.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2014, 00:36

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Работа с текстовым файлом
Дан текстовый файл, содержащий текст, номера телефонов в формате без скобок, в той же строке...

Работа с текстовым файлом
Добрый день! Может быть кто-нибудь напишет программу. Нужно, чтоб в случайном порядке было взято...

Работа с текстовым файлом
С помощью текстового редактора создать файл, содержащий текст, длина которого не превышает 1000...

Работа с текстовым файлом
Создать текст файл с произвольной инфой. Организовать просмотр содержиммого файла.Организовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.