Qfile очистить содержимое файла

Обновлено: 07.07.2024

На этом шаге рассмотрим класс QFile.

Класс QFile унаследован от класса QIODevice. В нем содержатся методы для работы с файлами: открытия, закрытия, чтения и записи данных. Создать объект можно, передав в конструкторе строку, содержащую имя файла. Можно ничего не передавать в конструкторе, а сделать это после создания объекта вызовом метода setName(). Например:

В процессе работы с файлами иногда требуется узнать, открыт файл или нет. Для этого вызывается метод QIODevice::isOpen(), который вернет значение true, если файл открыт, иначе — false.

Чтобы закрыть файл, нужно вызвать метод close(). С закрытием осуществляется запись всех данных буфера. Если требуется выполнить запись данных буфера в файл без его закрытия, то вызывается метод QFile::flush().

Проверить, существует ли нужный вам файл, можно статическим методом QFile::exists(). Этот метод принимает строку, содержащую полный или относительный путь к файлу. Если файл найден, то метод возвратит значение true, в противном случае — false. Для проведения этой операции существует и нестатический метод QFile::exists(), который проверяет существование файла, возвращаемого методом fileName().

Методы QIODevice::read() и QIODevice::write() позволяют считывать и записывать файлы блоками.

Если требуется считать или записать данные за один раз, то используют методы QIODevice::write() и QIODevice::readAll(). Все данные можно считать в объект класса QByteArray, а потом записать из него в другой файл.

Для удаления файла класс QFile содержит статический метод remove(). В этот метод необходимо передать строку, содержащую полный или относительный путь удаляемого файла.

Продемонстрируем применение некоторых методов работы с файлами. Рассмотрим следующий пример. Даны два файла f1.dat и f2.dat. Необходимо записать в файл f3.dat первые 5 символов из файла f1.dat, а затем первые 5 символов из файла f2.dat, и в завершении дописать содержимое файла f1.dat в конец файла f2.dat. Реализация этого примера приведена на рисунке 1.

Пингвин читает содержимое файла

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

Полное имя файла, дерево файловой системы.

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

Если мы хотим обратиться к файлу /text.txt, находясь в директории /etc/, то необходимо писать ../text.txt

Если к файлу в текущей директории, то text.txt или ./text.txt

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

Более подробную информацию о файлах можно найти в сети.

Обратите внимание, что на сайте имеется очень похожая статья статья про реализацию чтения из файлов на C++, но без использования фреймворка Qt.

Класс QFile наследует класс QIODevice, который для работы с файлами предоставляет методы: открытия и закрытия файлов, для записи и чтения из файла, для создания и удаления файлов.

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

Можно не передавать имя файла в конструктор, а установить его в объекте методом setName().

Часто при работе с файлами требуется узнать, открыт ли файл. Метод QIODevice::isOpen() возвращает значение true, если файл открыт и false в противном случае. А так как QFile унаследован от него, то мы можем проверить, открыт ли файл.

Для закрытия файла нужно вызвать метод QFile::close()

Обратите внимание, что данные сразу не записываются в файл на накопителе, они записываются в буфер в оперативной памяти. После закрытия файла данные из буфера записываются в файл на носителе. Это сделано для того, чтобы не нагружать жесткий диск или любой другой тип накопителя, на котором находится файл. Информацию из буфера в файл можно записать принудительно без закрытия файла, вызвав метод QFile::flush()

Существует очень полезный метод QFile::exists(). Он принимает на вход строку с именем файла и возвращает значение true, если такой файл существует. Существует статический и нестатический методы. Для работы со статическим методом необходимо указать имя файла.

Для работы с нестатическим достаточно просто его вызвать.

Для возможности записи или чтения необходимо открыть файл с указанием флага чтения QIODevice::ReadOnly или записи QIODevice::WriteOnly. Пример открытия файла для записи:

Есть разные способы чтения из фалов и записи. Можно считать или записать всю информацию за один раз, а можно по одному символу или блоками.

Для примера напишем программу, которая считывает из файла блок из первых 10-ти символов, а потом вставляет в другой файл.

Я создал файл filein.txt и внёс в него произвольный текст с помощью текстового редактора. После запуска программы я открыл filein.txt и fileout.txt в текстовом редакторе.

Первые 10 символов

Первые 10 символов

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

Нужно заменить на строку

В результате программа считает все байты в массив block, а после запишет их во второй файл.

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

После передать адрес в конструктор нового объекста класса QTextStream.

А далее при помощи оператора << посылать строки в поток записи.

Содержимое fileout.txt после запуска программы

Содержимое файла fileout.txt

Содержимое файла fileout.txt

Запись в конец файла

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

Флаг QIODevice::Append помещает указатель для записи (seek) в конец файла, в итоге входящий поток записывается сразу после имеющейся информации в файле. Пример фрагмента использования:

В примере вместо QIODevice::WriteOnly используется QIODevice::Append. Если сделать такое изменение в предыдущей программе, то после нескольких запусков в файле fileout.txt будет храниться строчка

Text, text, text.Text, text, text.Text, text, text.

Итак, мы рассмотрели основные методы для работы с файлами. Более подробную информацию обо всех методах класса QFile и QIODevice можно найти в официальной документации Qt и в сети.

Для вас это может быть интересно:

QFile и файлы. Чтение и запись строк в файл. : 4 комментария

Помогло разобраться с классом, хорошо изложено! 🙂

Не понимаю, где будут сохраняться эти файлы

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

QT операции с файлами (создание, копирование, запись, удаление)

В QT нам часто необходимо выполнять различные операции с файлами, такие как создание файлов, запись, копирование и удаление и т.д., все из которых используют класс QFile.

Класс QFile предоставляет интерфейс для чтения и записи файлов. В обычных условиях мы можем напрямую передать имя файла при вызове конструктора, что является более удобным методом. Или используйте QFile для создания объекта, а затем вызовите метод setFileName (), чтобы установить путь к файлу. Разделителем пути в имени файла должен быть '/', другие разделители не поддерживаются QFile.

QFile(const QString & name)
QFile(QObject * parent)
QFile(const QString & name, QObject * parent)

Общие функции QFile:

Название функции

Режим открытия файла:

Режим Значение Описание
QIODevice::NotOpen 0x0000 Не открывать
QIODevice::ReadOnly 0x0001 Режим только для чтения
QIODevice::WriteOnly 0x0002 Режим только для записи, если файл не существует, файл будет создан автоматически
QIODevice::ReadWrite ReadOnly | WriteOnly Методы чтения и письма
QIODevice::Append 0x0004 Этот режим означает, что все данные записываются в конец файла.
QIODevice::Truncate 0x0008 Перед открытием файла файл усекается, и все данные в исходном файле будут потеряны.
QIODevice::Text 0x0010 При чтении флаг конца файла будет преобразован в «\ n»; при записи флаг конца файла будет преобразован в конец локальной кодировки, например в конец win32 ’\ r \ n’
QIODevice::UnBuffered 0x0020 Не кэшировать

1. Создайте и откройте файл.

2. Определите, существует ли файл.

3. Скопируйте файлы.

4. Переименуйте файл.

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

На этом уроке мы рассмотрим работу с файлами и каталогами в Qt5. Для этого мы будем использовать следующие классы:

QFile , QDir и QFileInfo — основные классы для работы с файлами в Qt5;

QFile — предоставляет интерфейс для чтения и записи информации в файлы;

QDir — обеспечивает доступ к структуре каталогов и к их содержимому;

QFileInfo — предоставляет информацию о файле, включая его имя и расположение в файловой системе, время доступа и изменения, имя владельца файла и текущие разрешения.

Размер файла

Для определения размера файла в классе QFileInfo предусмотрен метод size():

// Имя файла передается в качестве аргумента в нашу программу qWarning ( "The file does not exist" ) ; // если файл не найден, то выводим предупреждение и завершаем работу программы qint64 size = fileinfo . size ( ) ; // qint64 - это тип данных, который гарантированно будет 64-битным на всех платформах, поддерживаемых Qt

Для запуска программы проделайте следующие шаги:

ПОДГОТОВКА:

Шаг №1: Скомпилируйте вашу программу. Для этого выберите в меню "Сборка" > "Собрать всё" (или нажмите Ctrl+Shift+B ).

Шаг №2: Зайдите в папку, где лежит ваш Qt-проект (у меня он расположен в C:\dev\Qt_Project ).

Шаг №3: После выполнения первого шага у вас должна появиться еще одна папка, в которой будет создан исполняемый файл программы. Т.к. я использую компилятор MinGW 32-bit и режим компиляции Debug, то при компиляции проекта Qt автоматически создал папку build-My_QtApplication-Desktop_Qt_5_13_0_MinGW_32_bit-Debug .

Шаг №4: Зайдите в папку debug (она находится внутри папки, созданной на шаге №3).

Шаг №5: Найдите *.exe-файл вашей программы (у меня это file_size.exe ).

Шаг №6: Скопируйте этот файл в папку к соответствующему компилятору (напомню, т.к. я использовал компилятор MinGW 32-bit, то у меня этот путь выглядит следующим образом: C:\Soft\Qt\5.13.0\mingw73_32\bin ).

ЗАПУСК ПРОГРАММЫ:

Шаг №7: Откройте командную строку.

Шаг №8: Перейдите в папку, указанную в шаге №6 ( cd C:\Soft\Qt\5.13.0\mingw73_32\bin ).

Шаг №9: Запустите свою программу, передав ей в качестве параметра имя любого файла (у меня этим файлом оказалась эта же программа, поэтому в моем случае команда была следующей: file_size.exe file_size.exe ).

Результат выполнения программы:



Чтение содержимого файлов

Для того, чтобы прочитать содержимое файла, мы должны сначала открыть этот файл в режиме чтения, затем создать входящий файловый поток, из которого мы будем считывать данные. В примере, приведенном ниже, мы считываем данные из файла C:\colours.txt . Файл содержит названия семи цветов, вот его содержимое:

Red
Green
Black
Yellow
Purple
Blue
White

Читайте также: