Инструменты пользователя

Инструменты сайта


develop:qt:files

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
develop:qt:files [2021/09/12 12:32]
admin
develop:qt:files [2021/09/22 05:22] (текущий)
admin
Строка 1: Строка 1:
 ====== Файлы, каталоги, Ввод/Вывод ====== ====== Файлы, каталоги, Ввод/Вывод ======
 +
  
 ===== Ввод/Вывод. Класс QIODevice ===== ===== Ввод/Вывод. Класс QIODevice =====
------ 
 **IODevice**- это абстрактный класс, обобщающий устройства ввода/вывода.\\ **IODevice**- это абстрактный класс, обобщающий устройства ввода/вывода.\\
 Реализация конкретного устройства происходит в унаследованных классах, есть 4 предопределенных: Реализация конкретного устройства происходит в унаследованных классах, есть 4 предопределенных:
Строка 10: Строка 10:
   * **QProcess** - работа с процессами   * **QProcess** - работа с процессами
  
-Для работы с устройством, его необходимо открыть в одном из след режимов: +Для работы с устройством, его необходимо открыть в одном из след режимов (**QIODevice::**)
-  * **QIODevice::NotOpen** - устр-во не открыто (хз зачем вообще) +  * **NotOpen** - устр-во не открыто (хз зачем вообще) 
-  * **QIODevice::ReadOnly** - только чтение +  * **ReadOnly** - только чтение 
-  * **QIODevice::WriteOnly** - только запись +  * **WriteOnly** - только запись 
-  * **QIODevice::ReadWrite** - чтение/запись +  * **ReadWrite** - чтение/запись 
-  * **QIODevice::Append** - добавление +  * **Append** - добавление 
-  * **QIODevice::Unbuffered** - непосредственный доступ к данным, без промежуточных буферов чтения/записи +  * **Unbuffered** - непосредственный доступ к данным, без промежуточных буферов чтения/записи 
-  * **QIODevice::Text** - преобразование символов переноса (Windows/Unix)+  * **Text** - преобразование символов переноса (Windows/Unix)
  
 Метод **openMode()** позволяет узнать в каком режиме открыто устройство.\\ Метод **openMode()** позволяет узнать в каком режиме открыто устройство.\\
Строка 29: Строка 29:
 <summary>:!: Пример: Вывод на консоль с любого устройства в/в.</summary> <summary>:!: Пример: Вывод на консоль с любого устройства в/в.</summary>
 <code cpp-qt> <code cpp-qt>
- +void print(QIODevice *vDev) 
 +
 +    char vCh; 
 +    QString vStr; 
 +    vDev->open(QIODevice::ReadOnly); 
 +    for(; !vDev->atEnd();
 +    { 
 +        vDev->getChar(&vCh); 
 +        vStr += vCh; 
 +    } 
 +    vDev->close(); 
 +    qDebug() << vStr; 
 +}
 </code> </code>
 </details> </details>
- 
- 
  
  
 ==== Работа с файлами. Класс QFile ==== ==== Работа с файлами. Класс QFile ====
 ----- -----
 +Открыть файл можно передав путь в конструкторе, либо позже, методом **setName()**. Проверить открытие файла **isOpen()**, с закрытием файла (**close()**) сброс буфера происходит автоматически, можно вызвать его вручную, методом **flush()**. Для проверки существования есть статический метод **QFile::exist()**.\\
 +Для удаления файла есть статический метод **remove()**
 +
 +Для экономии ОЗУ можно использовать **сжатие**, методами **qCompress()** и **qUncompress()**, они работают с классом **QByteArray**.\\
 +
 +<details>
 +<summary>:!: Пример: немного методов для работы с файлами</summary>
 +<code cpp-qt>
 +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();
 +}
 +</code>
 +</details>
  
  
 ==== Класс QBuffer ==== ==== Класс QBuffer ====
 ----- -----
 +Представляет собой эмуляцию файлов в памяти компьютера. Это позволяет записывать информацию в ОЗУ, и использовать объекты как обычные файлы. Чтение запись можно делать методами **read()** и **write()**, либо же с помощью потоков.\\
 +
 +<code cpp-qt>
 +QByteArray vArr;
 +QBuffer vBuffer(&vArr);
 +vBuffer.open(QIODevice::WriteOnly);
 +QDataStream vOut(&vBuffer);
 +vOut << QString("Message");
 +</code>
 +Из примера видно, что сами данные сохраняются внутри объекта **QByteArray**. Методом **buffer()** можно получить константную ссылку на этот внутренний объект, 
 +а методом **setBuffer()** соответственно установить для использования другой объект.\\
 +
 +Метод **data()** идентичен **buffer()**, но **setData()** возвращает не указатель (как setBuffer()) константную ссылку на **QByteArray**, для копирования его данных.\\
 +
 +В целом, данный класс удобен для кэширования данных.\\
 +
 +
 ==== Класс QTemporaryFile ==== ==== Класс QTemporaryFile ====
 ----- -----
 +Предоставляет средства для создания и работы с временными файлами, временные файлы могут пригодится например для сброса больших данных на диск.\\
 +Самостоятельно генерирует уникальное имя файла, хранятся файлы в промежуточной директории (**QDir::tempPath()**), при уничтожении объекта, уничтожаются и его временные файлы.
  
  
 ===== Работа с каталогами. Класс QDir ===== ===== Работа с каталогами. Класс QDir =====
 +Представление каталогов в платформонезависимом виде.\\
 +Имеет ряд статических методов (**QDir::**):
 +  * **current()** - текущий каталог приложения
 +  * **root()** - корневой каталог
 +  * **drivers()** - список с узловыми каталогами, например для винды это корневые разделы (C:\, D:\ и т.д.) (указатель на объект QFileInfo)
 +  * **home()** - каталог пользователя
 +
 +Данный класс не предоставляет методов для определения каталога из которого запущено приложение, его можно определить методом- **QApplication::applicationDirPath()**.\\
 +
 +Существование можно определить **exist()**. Для перемещения используются **cd()**, **cdUp()**, **cd("..")** и т.д.\\
 +Для конвертирования относительного пути к абсолютному- **makeAbsolute()**.\\
 +
  
 ==== Содержимое каталога ==== ==== Содержимое каталога ====
 ----- -----
 +
 +Метод **entryList()** возвращает перечень содержимого, есть фильтры и т.д.\\
 +Отобразить можно с помощью представления, например **QListWidget** унаследована от **QListView** и имеет инструменты для работы с элементами (вставка/удаление и т.д.).\\
 +
 +
 +<details>
 +<summary>:!: Пример: Содержимое каталога</summary>
 +<code cpp-qt>
 +/*...*/
 +QDir *vDirectory= new QDir(this->txtSelectedDir->toPlainText());
 +QListWidget viewListResults->addItems(vDirectory->entryList());
 +/*...*/
 +</code>
 +</details>
 +
 +
  
  
Строка 81: Строка 163:
 <details> <details>
 <summary>:!: Пример: </summary> <summary>:!: Пример: </summary>
-<code >+<code cpp-qt>
  
 </code> </code>
 </details> </details>
develop/qt/files.1631449953.txt.gz · Последнее изменение: 2021/09/12 12:32 — admin