IODevice- это абстрактный класс, обобщающий устройства ввода/вывода.
Реализация конкретного устройства происходит в унаследованных классах, есть 4 предопределенных:
Для работы с устройством, его необходимо открыть в одном из след режимов (QIODevice::):
Метод openMode() позволяет узнать в каком режиме открыто устройство.
Для чтения записи методы read() и write(), метод readAll() читает все и возвращает QByteArray. Так же есть readLine() и getChar().
Получить текущее положение курсора pos(), сменить его- seek(). Применимо к QFile, QBuffer и QTemoraryFile, не применимо при сетевом доступе.
Есть ряд методов, для получения информации об устройстве, например isReadable() и isWriteable().
Открыть файл можно передав путь в конструкторе, либо позже, методом setName(). Проверить открытие файла isOpen(), с закрытием файла (close()) сброс буфера происходит автоматически, можно вызвать его вручную, методом flush(). Для проверки существования есть статический метод QFile::exist().
Для удаления файла есть статический метод remove()
Для экономии ОЗУ можно использовать сжатие, методами qCompress() и qUncompress(), они работают с классом QByteArray.
void TestFiles() { QFile vFile1("file1.dat"); QFile vFile2("file2.dat"); if(vFile2.exists()) qDebug() << "File is exist"; if(!vFile1.open(QIODevice::ReadOnly)) qDebug() << "Open Error"; QByteArray a= vFile1.readAll(); vFile2.write(a); vFile1.close(); vFile2.close(); }
Представляет собой эмуляцию файлов в памяти компьютера. Это позволяет записывать информацию в ОЗУ, и использовать объекты как обычные файлы. Чтение запись можно делать методами read() и write(), либо же с помощью потоков.
QByteArray vArr; QBuffer vBuffer(&vArr); vBuffer.open(QIODevice::WriteOnly); QDataStream vOut(&vBuffer); vOut << QString("Message");
Из примера видно, что сами данные сохраняются внутри объекта QByteArray. Методом buffer() можно получить константную ссылку на этот внутренний объект,
а методом setBuffer() соответственно установить для использования другой объект.
Метод data() идентичен buffer(), но setData() возвращает не указатель (как setBuffer()) константную ссылку на QByteArray, для копирования его данных.
В целом, данный класс удобен для кэширования данных.
Предоставляет средства для создания и работы с временными файлами, временные файлы могут пригодится например для сброса больших данных на диск.
Самостоятельно генерирует уникальное имя файла, хранятся файлы в промежуточной директории (QDir::tempPath()), при уничтожении объекта, уничтожаются и его временные файлы.
Представление каталогов в платформонезависимом виде.
Имеет ряд статических методов (QDir::):
Данный класс не предоставляет методов для определения каталога из которого запущено приложение, его можно определить методом- QApplication::applicationDirPath().
Существование можно определить exist(). Для перемещения используются cd(), cdUp(), cd(«..») и т.д.
Для конвертирования относительного пути к абсолютному- makeAbsolute().
Метод entryList() возвращает перечень содержимого, есть фильтры и т.д.
Отобразить можно с помощью представления, например QListWidget унаследована от QListView и имеет инструменты для работы с элементами (вставка/удаление и т.д.).
/*...*/ QDir *vDirectory= new QDir(this->txtSelectedDir->toPlainText()); QListWidget viewListResults->addItems(vDirectory->entryList()); /*...*/