Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
develop:qt:files [2021/09/12 11:57] admin создано |
develop:qt:files [2021/09/22 05:22] (текущий) admin |
||
---|---|---|---|
Строка 2: | Строка 2: | ||
+ | ===== Ввод/ | ||
+ | **IODevice**- это абстрактный класс, обобщающий устройства ввода/ | ||
+ | Реализация конкретного устройства происходит в унаследованных классах, | ||
+ | * **QFile** - работа с файлами | ||
+ | * **QBuffer/ | ||
+ | * **QAbstractSocket** - базовый класс, для сетевой коммуникации | ||
+ | * **QProcess** - работа с процессами | ||
+ | |||
+ | Для работы с устройством, | ||
+ | * **NotOpen** - устр-во не открыто (хз зачем вообще) | ||
+ | * **ReadOnly** - только чтение | ||
+ | * **WriteOnly** - только запись | ||
+ | * **ReadWrite** - чтение/ | ||
+ | * **Append** - добавление | ||
+ | * **Unbuffered** - непосредственный доступ к данным, | ||
+ | * **Text** - преобразование символов переноса (Windows/ | ||
+ | |||
+ | Метод **openMode()** позволяет узнать в каком режиме открыто устройство.\\ | ||
+ | Для чтения записи методы **read()** и **write()**, | ||
+ | |||
+ | Получить текущее положение курсора **pos()**, сменить его- **seek()**. Применимо к **QFile**, **QBuffer** и **QTemoraryFile**, | ||
+ | |||
+ | Есть ряд методов, | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <code cpp-qt> | ||
+ | void print(QIODevice *vDev) | ||
+ | { | ||
+ | char vCh; | ||
+ | QString vStr; | ||
+ | vDev-> | ||
+ | for(; !vDev-> | ||
+ | { | ||
+ | vDev-> | ||
+ | vStr += vCh; | ||
+ | } | ||
+ | vDev-> | ||
+ | qDebug() << vStr; | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Работа с файлами. Класс QFile ==== | ||
+ | ----- | ||
+ | Открыть файл можно передав путь в конструкторе, | ||
+ | Для удаления файла есть статический метод **remove()** | ||
+ | |||
+ | Для экономии ОЗУ можно использовать **сжатие**, | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <code cpp-qt> | ||
+ | void TestFiles() | ||
+ | { | ||
+ | QFile vFile1(" | ||
+ | QFile vFile2(" | ||
+ | |||
+ | if(vFile2.exists()) | ||
+ | qDebug() << "File is exist"; | ||
+ | if(!vFile1.open(QIODevice:: | ||
+ | qDebug() << "Open Error"; | ||
+ | |||
+ | QByteArray a= vFile1.readAll(); | ||
+ | vFile2.write(a); | ||
+ | |||
+ | vFile1.close(); | ||
+ | vFile2.close(); | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Класс QBuffer ==== | ||
+ | ----- | ||
+ | Представляет собой эмуляцию файлов в памяти компьютера. Это позволяет записывать информацию в ОЗУ, и использовать объекты как обычные файлы. Чтение запись можно делать методами **read()** и **write()**, | ||
+ | |||
+ | <code cpp-qt> | ||
+ | QByteArray vArr; | ||
+ | QBuffer vBuffer(& | ||
+ | vBuffer.open(QIODevice:: | ||
+ | QDataStream vOut(& | ||
+ | vOut << QString(" | ||
+ | </ | ||
+ | Из примера видно, что сами данные сохраняются внутри объекта **QByteArray**. Методом **buffer()** можно получить константную ссылку на этот внутренний объект, | ||
+ | а методом **setBuffer()** соответственно установить для использования другой объект.\\ | ||
+ | |||
+ | Метод **data()** идентичен **buffer()**, | ||
+ | |||
+ | В целом, данный класс удобен для кэширования данных.\\ | ||
+ | |||
+ | |||
+ | ==== Класс QTemporaryFile ==== | ||
+ | ----- | ||
+ | Предоставляет средства для создания и работы с временными файлами, | ||
+ | Самостоятельно генерирует уникальное имя файла, хранятся файлы в промежуточной директории (**QDir:: | ||
+ | |||
+ | |||
+ | ===== Работа с каталогами. Класс QDir ===== | ||
+ | Представление каталогов в платформонезависимом виде.\\ | ||
+ | Имеет ряд статических методов (**QDir:: | ||
+ | * **current()** - текущий каталог приложения | ||
+ | * **root()** - корневой каталог | ||
+ | * **drivers()** - список с узловыми каталогами, | ||
+ | * **home()** - каталог пользователя | ||
+ | |||
+ | Данный класс не предоставляет методов для определения каталога из которого запущено приложение, | ||
+ | |||
+ | Существование можно определить **exist()**. Для перемещения используются **cd()**, **cdUp()**, **cd(" | ||
+ | Для конвертирования относительного пути к абсолютному- **makeAbsolute()**.\\ | ||
+ | |||
+ | |||
+ | ==== Содержимое каталога ==== | ||
+ | ----- | ||
+ | |||
+ | Метод **entryList()** возвращает перечень содержимого, | ||
+ | Отобразить можно с помощью представления, | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code cpp-qt> | ||
+ | /*...*/ | ||
+ | QDir *vDirectory= new QDir(this-> | ||
+ | QListWidget viewListResults-> | ||
+ | /*...*/ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Информация о файлах. Класс QFileInfo ===== | ||
+ | |||
+ | ==== Файл или Каталог ==== | ||
+ | ----- | ||
+ | ==== Путь и имя файла ==== | ||
+ | ----- | ||
+ | ==== Информация о дате/ | ||
+ | ----- | ||
+ | ==== Атрибуты файла ==== | ||
+ | ----- | ||
+ | ==== Размер файла ==== | ||
+ | ----- | ||
+ | |||
+ | |||
+ | ===== Наблюдение за файлами и каталогами | ||
+ | |||
+ | |||
+ | ===== Потоки ввода/ | ||
+ | |||
+ | ==== QTextStream ==== | ||
+ | ----- | ||
+ | ==== QDataStream ==== | ||
+ | ----- | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code cpp-qt> | ||
+ | |||
+ | </ | ||
+ | </ |