Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архангельский М.В._2154_лаб.1.docx
Скачиваний:
16
Добавлен:
31.10.2023
Размер:
376.7 Кб
Скачать
  1. Используя объекты класса qFile, скопировать содержимое одного бинарного файла в другой блоками по 2 символа, при этом осуществить проверку на возможность открытия файлов для чтения и записи.

Создам в папке с проектом файл с именем "here_is_the_text.txt", внесём в него текстовую информацию. Аналогично создам пустой файл с именем "copy.txt".

Листинг 10. Содержание файла "main.cpp"

#include <QApplication> // подключили заголовочные файлы с определениями классов QApplication (приложение)

#include <QFile> // QFile (класс для проведения операций с файлами)

#include <QBuffer> // QBuffer (позволяет записывать и считывать данные в массив QByteArray, как будто бы это устройство или файл)

#include <QDebug>

int main(int argc, char *argv[ ])

{

QApplication app(argc, argv);

QFile file("here_is_the_text.txt");

QFile copy_file("copy.txt");

if(copy_file.exists())

{

//Файл уже существует. Перезаписать?

}

if (!file.open(QIODevice::ReadOnly))

{

qDebug() << "Ошибка открытия для чтения";

}

if(!copy_file.open(QIODevice::WriteOnly))

{

qDebug() << "Ошибка открытия для записи";

}

char a[1];

while(!file.atEnd())

{

int nBlocksize = file.read(a, sizeof(a));

copy_file.write(a, nBlocksize);

}

file.close(); // обязательно необходимо закрыть файлы (потоки ввода/вывода)

copy_file.close();

return app.exec( );

}

Рисунок 9. Файл copy.txt после завершения работы программы.

  1. Повторить предыдущий пункт задания с использованием объектов класса qByteArray

Листинг 11. Содержание файла "main.cpp"

#include <QApplication> // подключили заголовочные файлы с определениямиклассов QApplication (приложение)

#include <QFile> // QFile (класс для проведения операций с файлами)

#include <QBuffer> // QBuffer (позволяет записывать и считывать данные вмассив QByteArray, как будто бы это устройство или файл)

#include <QDebug>

int main(int argc, char *argv[ ])

{

QApplication app(argc, argv);

/*Если требуется считать или записать данные за один раз, то используют

методы QIODevice::write()и QIODevice::readAll().

Все данные можно считать в объект классаQByteArray,

а потом записать из него в другой файл

*/

QFile file("text.txt");

QFile copy_file("copy_text.txt");

if(copy_file.exists())

{

//Файл уже существует. Перезаписать?

}

if(!file.open(QIODevice::ReadOnly))

{

qDebug() << "Ошибка открытия для чтения";

}

if(!copy_file.open(QIODevice::WriteOnly))

{

qDebug() << "Ошибка открытия для записи";

}

QByteArray a = file.readAll();

copy_file.write(a);

file.close();

copy_file.close();

return app.exec( );

}

Рисунок 10. Файл copy_text.txt после завершения работы программы.

  1. Используя объекты класса QBuffer, осуществить вывод текстовой строки «Arkhangelskiy M.V.» в консоль.

Листинг 12. Содержание файла "main.cpp"

#include <QApplication> //подключили заголовочные файлы с определениями классов QApplication (приложение)

#include <QBuffer> // QBuffer (позволяет записывать и считывать данные в массив QByteArray, как будто бы это устройство или файл)

#include <QDebug>

#include <QDataStream>

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

QByteArray arr;

QBuffer buffer(&arr);

buffer.open(QIODevice::WriteOnly);

QDataStream out(&buffer);

out << QString("Arkhangelskiy M. V.");

qDebug()<<arr;

/*сами данные сохраняются внутри объекта класса QByteArray.

При помощи метода buffer() можно получить константную ссылку к

внутреннему объекту QByteArray

*/

return app.exec( );

}

Рисунок 11. Вывод текстовой строки в консоль