Перейти к содержанию
    

qt, открыть файл в фоновом режиме, внести изменеи

Здравствуйте!

 

Здравствуйте!

 

Подскажите пожалуйста, как в qt открыть файл в фоновом режиме?, добавить строчку и сохранить?

 

Заранее благодарен!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте!

 

Здравствуйте!

 

Подскажите пожалуйста, как в qt открыть файл в фоновом режиме?, добавить строчку и сохранить?

 

Заранее благодарен!

 

Вообще, можно обойтись только средствами C++11. На Qt в простейшем случае можно поступить так:

#include <QtCore\QString>
#include <QtConcurrent\QtConcurrentRun>
#include <QtCore\QFile>

void writeString(const QString &fp, const QString &s)
{
    QFile f(fp);
    if (!f.open(QIODevice::Append))
        return;
    QTextStream stream(&f);
    stream << s << endl;
}

int main()
{
    QtConcurrent::run(writeString, QString("C:\\cppdev\\42\\1.txt"), QString("new str"));
    while (true);
}

 

Но если запись происходит регулярно, то простейший вариант может не подойти (ибо может получиться, что очередная запись начнется, до завершения предыдущей и тогда в файле может получиться не то, что нужно)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое!

 

А Вы не подскажите как вызывать writeString?

 

Вот я открываю диалог для выбора файла

 

void MainWindow::on_pushButton_pressed()
{

   str1 = QFileDialog::getOpenFileName(0, "Выбор файла", "", "*.edf");
   QFile file1(str1);

   QString s = str1.section('/',-1);
      
   if(str1!="")
   {
       ui->textEdit->append("Открыт EDIF");
           ui->textEdit->append(str1);
ui->lineEdit->setText(s);
   }
}

по идее гдето должен быть указатель на считывание файла

 

еще QtConcurrent::run(writeString, QString("C:\\cppdev\\42\\1.txt"), QString("new str"));

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по идее гдето должен быть указатель на считывание файла

Не понятно, что это значит

 

QtConcurrent::run(writeString, QString("C:\\cppdev\\42\\1.txt"), QString("new str"));

НЕ запускает приложение, а запускает асинхронное (фоновое) выполнение функции writeString

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QtGui>
#include <QTextEdit>
QString strFilter;
QString str1;
QString str2;
char a[1024];

QString s = "Строка 1";
QString d = "Строка 2";
QString r;

#include <QtCore\QString>
#include <QtConcurrent\QtConcurrentRun>
#include <QtCore\QFile>

void writeString(const QString &fp, const QString &s)
{
QFile f(fp);
if (!f.open(QIODevice::Append))
	return;
QTextStream stream(&f);
stream << s << endl;
}



MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{



ui->setupUi(this);


}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_pressed()
{

  str1 = QFileDialog::getOpenFileName(0, "Выбор файла", "", "*.edf");
  QFile file1(str1);

  QString s = str1.section('/',-1);

  if(str1!="")
  {
   ui->textEdit->append("Открыт EDIF");
   ui->textEdit->append(str1);
   ui->lineEdit->setText(s);
  }
  QtConcurrent::run(writeString, QString("C:\\cppdev\\42\\1.txt"), QString("new str"));
  while (true);
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разумеется, while (true) нужно убрать. В примере это было нужно, чтобы программа не завершилась раньше времени

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое, теперь не виснет, но и запись в C:\\cppdev\\42\\1.txt" "new str" не происходит(....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо большое, теперь не виснет, но и запись в C:\\cppdev\\42\\1.txt" "new str" не происходит(....

Путь c:\cppdev\42 должен существовать. Файл создастся только в существующей папке

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Путь c:\cppdev\42 должен существовать. Файл создастся только в существующей папке

угу, папка и файл соответствующий был сделан

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите пожалуйста, необходимо сделать парсинг файла, QFile является достаточным классом для этого?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...