|
|
  |
qt, открыть файл в фоновом режиме, внести изменеи, и сохранить |
|
|
|
Dec 11 2016, 18:18
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 3-11-11
Пользователь №: 68 126

|
Цитата(addi II @ Dec 11 2016, 10:08)  Здравствуйте!
Здравствуйте!
Подскажите пожалуйста, как в 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); } Но если запись происходит регулярно, то простейший вариант может не подойти (ибо может получиться, что очередная запись начнется, до завершения предыдущей и тогда в файле может получиться не то, что нужно)
|
|
|
|
|
Dec 13 2016, 04:55
|
Местный
  
Группа: Участник
Сообщений: 277
Регистрация: 1-02-16
Пользователь №: 90 294

|
[quote name='conan' date='Dec 11 2016, 19:18' post='1467990'] Спасибо большое! А Вы не подскажите как вызывать 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); } } по идее гдето должен быть указатель на считывание файла [quote name='addi II' date='Dec 13 2016, 04:44' post='1468252'] еще QtConcurrent::run(writeString, QString("C:\\cppdev\\42\\1.txt"), QString("new str")); запускает приложение в фоновом режиме, а мне бы изменения делать в фоновом режиме), оболочка ПО нужна как мин чтобы выбрать файл, и сохранить его в новом месте, и далее преобразование по кнопке.
|
|
|
|
|
Dec 13 2016, 05:50
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 3-11-11
Пользователь №: 68 126

|
Цитата по идее гдето должен быть указатель на считывание файла Не понятно, что это значит QtConcurrent::run(writeString, QString("C:\\cppdev\\42\\1.txt"), QString("new str")); НЕ запускает приложение, а запускает асинхронное (фоновое) выполнение функции writeString
|
|
|
|
|
Dec 14 2016, 22:28
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 3-11-11
Пользователь №: 68 126

|
Разумеется, while (true) нужно убрать. В примере это было нужно, чтобы программа не завершилась раньше времени
|
|
|
|
|
Dec 21 2016, 05:53
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 3-11-11
Пользователь №: 68 126

|
Цитата(addi II @ Dec 21 2016, 07:48)  Спасибо большое, теперь не виснет, но и запись в C:\\cppdev\\42\\1.txt" "new str" не происходит(.... Путь c:\cppdev\42 должен существовать. Файл создастся только в существующей папке
|
|
|
|
|
Dec 22 2016, 03:59
|
Местный
  
Группа: Участник
Сообщений: 277
Регистрация: 1-02-16
Пользователь №: 90 294

|
Цитата(conan @ Dec 21 2016, 06:53)  Путь c:\cppdev\42 должен существовать. Файл создастся только в существующей папке угу, папка и файл соответствующий был сделан
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|