Qt Форум

Уважаемые все,

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

  Файл QFile ("C:/Users/frti1017/Documents/GUI-Vision/result_storage.txt");  if (file.open (QIODevice :: WriteOnly | QIODevice :: Text)) {//Мы собираемся передать текст в файл потоковой передачей QTextStream stream (& file);  stream  

Как записать каждую строку данных в новую строку?

Большое спасибо.

С уважением. С уважением,
Тимо


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


@ Timo_F При открытии файла добавьте QIODevice :: Append:

  if (file.open (QIODevice :: WriteOnly | QIODevice :: Append | QIODevice :: Text))  

Иначе вы перезаписываете файл каждый раз, когда открываете его.


@Timo_F Если вы вызываете эту функцию более одного раза, вы будете перезаписывать файл и предыдущую строку каждый раз.

Если вы просто открываете файл и записываете в него, вы начинаете писать в начале файла.

Самый простой wa, в данном случае y — открыть файл с помощью QIODevice :: Append
link


Это работает, спасибо вас всех много 🙂 🙂



Создание/запись в новый файл в Qt

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

Мой код сейчас выглядит так:

  QString filename = "Data.txt"  ; QFile file (имя файла); if (file.open (QIODevice :: ReadWrite)) {поток QTextStream (& файл);  stream  

Если я создаю текстовый файл с именем Data в каталоге, он останется пустым. Если я ничего не создаю, это тоже не создает файл. Я не знаю, что с этим делать, это не первый способ, которым я пытался создать/записать в файл, и ни один из способов работает.

Спасибо за ответы.


Вы уверены, что находитесь в нужном каталоге?
Открытие файла без полный путь откроет его в текущем рабочем каталоге. В большинстве случаев это не то, что вам нужно. Попробуйте изменить первую строку на

QString filename = "c: \ Data.txt" или
QString filename = "c:/Data. txt "

и посмотрите, создан ли файл в c:


28

Это странно, все выглядит нормально, вы уверены, что это не сработает для вас? Потому что это main , безусловно, работает для меня, поэтому я бы поискал источник вашей проблемы в другом месте.

  #include  #include   int main () {QString filename = "Data.txt"; QFile file (filename); if (file.open (QIODevice :: ReadWrite)) {QTextStream stream (& file); stream  

Предоставленный вами код также почти такой же, как и тот, который предоставлен в подробном описании QTextStream, поэтому я почти уверен, что проблема в другом месте 🙂

Также обратите внимание, что файл называется не Data , а Data.txt и должен быть создан/расположен в каталоге, из которого была создана программа. бежать (не обязательно тот, где находится исполняемый файл).

ответил 6 февраля ‘ 11, 21:30
добавить комментарий |

Это странно, все выглядит нормально, вы уверены, что у вас не работает? Поскольку этот main определенно работает для меня, я бы поискал источник вашей проблемы где-нибудь еще.

  #include  #  include  int main () {QString filename = "Data.txt";  QFile file (имя файла);  if (file.open (QIODevice :: ReadWrite)) {поток QTextStream (& файл);  поток  

Предоставленный вами код также почти такой же, как и тот, который предоставлен в подробном описании QTextStream, поэтому я почти уверен, что проблема в другом месте 🙂

Также обратите внимание, что файл называется не Data , а Data.txt и должен быть создан/расположен в каталоге, из которого программа был запущен (не обязательно тот, где находится исполняемый файл).


11
  #include  #include  #include  int main (int argc, char * argv []) {//Создаем новый файл QFile file ("  out.txt ");  file.open (QIODevice :: WriteOnly | QIODevice :: Text);  QTextStream out (& файл);  out  

ответил 02 августа 2014 г. в 19:47
  • 3
    Это и не то ‘ на самом деле они решают проблему OP, и ваш код ничем не отличается от их … — Тройсеф, 29 октября 2015 г., 18:10
  • @Troyseph большое спасибо за отзыв. Если хотите, отредактируйте мой ответ. — d.danailov 02 ноя 2015 в 13:46
добавить комментарий |

  #include  #include  #include  int main (int argc, char *  argv []) {//Создаем новый файл QFile file ("out.txt");  file.open (QIODevice :: WriteOnly | QIODevice :: Text);  QTextStream out (& файл);  out  

3

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

Ваша текущая рабочая папка устанавливается Qt Создатель. Перейдите в Projects >> Выбранная вами сборка >> Нажмите кнопку «Run» (рядом с «Build»), и вы увидите, что это на этой странице, что, конечно, вы также можете изменить.

ответил 20 окт. в 17:27
добавить комментарий |

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

Ваша текущая рабочая папка устанавливается Qt Создатель. Перейдите в Projects >> Выбранная вами сборка >> Нажмите кнопку «Run» (рядом с «Build»), и вы увидите, что это на этой странице, что, конечно, вы также можете изменить.


2

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

В этом случае может случиться так, что программа завершается до завершения записи.

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

  stream  

Это гарантирует, что изменения будут зафиксированы в файле перед программа продолжает эту инструкцию.

Кажется, проблема в том, что QFile — это d построен до QTextStream. Итак, даже если поток сбрасывается в деструкторе QTextStream, уже слишком поздно, так как файл уже закрыт.

отредактировано 7 марта ’19 в 21:26
ответил 25 января ’18 в 8:29
добавить комментарий |

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

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

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

   stream  

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

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


0
  QFile file ("test.txt");/* * Если файл не существует, он будет создан */if (!  файл. open (QIODevice :: ReadOnly | QIODevice :: Text | QIODevice :: ReadWrite)) {qDebug ()  

отредактировал 18 апр. ’20 в 10:09
R1tschY
2,3442020 серебряных знаков2828 бронзовых знаков
ответил 14 июня ’16 в 16:20
добавить комментарий |

  QFile file ("test.txt");/* * Если файл не существует, он будет создан  */if (! file.open (QIODevice :: ReadOnly | QIODevice :: Text | QIODevice :: ReadWrite)) {qDebug ()  

Оцените статью
logicle.ru
Добавить комментарий