s
sander-007May 19, 2020, 3:08 p.m.

Использование файлов в памяти (memory file mapping)

Добрый день, у Шлее в книге прочитал файлами в памяти можно пользоваться как обычными файлами. Можно-ли реализовать такую вещь: генерируем файл Excel и открываем его без создания файла на диске? Кто-нибудь делал?

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
5

Добрый день.
Думается мне, что тут скорее другая проблема будет, сама по себе работа с файлом.
Уже здесь достаточно много вопросов по работе с Excel файлами возникало, но чаще это были проблемы с подключением к файлу, поскольку для работы с ними используется адаптер.
С самим Excel файлом я бы не пробовал этого делать ))

s

Добрый вечер, поподробнее опишу :)

Сейчас я читаю шаблон отчета Exel из базы в QbyteArray, сохраняю на диск и потом заполняю. Что нибудь с массивом можно делать, без сохранения на диск?

Ну с самим QByteArray можно что угодно сделать перед формированием файла.
Придётся только повозиться с его структурой. Но если там чисто Excel структура документа, то есть у вас уже готовый Excel файл находится в том QByteArray, то будет весьма тяжело что-то сделать с этим массивом. Реверс-инжениринг никогда не был лёгкой задачей.

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

То есть, если не ошибаюсь, то классический примеря маппинга файла в память выглядит так

QFile file("foo");
file.open(QFile::ReadWrite);
uchar *memory = file.map(0, file.size());
if (memory) {
    // have some fun with the data
    file.unmap();
}

Могу предположить, что пока не вызыван метод unmap() , то данные полностью не будут уложены на физический диск.
Попробуйте создавать такой файл с маппингом, работать с ним, а потом просто очищать и удалять.
В данном случае, предполагаю, что у вас будет создаваться файл на физическом диске, но вы сможете поработать с ним в памяти, возможно также, как работали с ним до этого.

Но говорю сразу, это мои предположения. Сам я такого не реализовывал. Так что, отпишитесь о результатах, если будет успешно.

  • May 25, 2020, 12:41 p.m.
  • (edited)

Есть еще такой вариант.
"Вот вам файл Exel.xml, там внутри логи работы прибора, автоматизируте построение графиков в отдельных окошках с прокрутками и другими плюшками"
Окау
Подключаемся к файлу через драйвер БД, смотрим структуру и выкачиваем данные запросами...
Как оказалось файл был псевдо-Exel - обычный текстовый файл с разделением данных табуляцией, но сохранён как ".xml".
Задача сильно упростилась до обычного парсинга, но и через драйвер БД тоже работала, только дольше и сложнее

s

Добрый вечер, проблемы работы с файлом Exel нет вообще. Весь смысл в том чтобы не создавать на диске физический файл (требования безопасности), дабы потом не чистить. А так вопрос только в этом :)

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Timeweb

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting
SN

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:10points,
  • Rating points-10
k
  • knobu
  • Sept. 23, 2020, 2:34 a.m.

C++ - Test 006. Enumerations

  • Result:60points,
  • Rating points-1
k
  • knobu
  • Sept. 23, 2020, 2:21 a.m.

C++ - Test 005. Structures and Classes

  • Result:91points,
  • Rating points8
Last comments
DI

Qt/C++ - Lesson 015. QTableWidget – How to create a table with checkboxes?

Кто-нибудь знает, как сделать так, чтобы в QTableWidget состоящей из чекбоксов в строке таблицы можно было выбрать только один checkbox ?

Qt/C++ - Lesson 006. QSqlQueryModel – Tables in Qt with SQL-query

QSqlTableModel выполняет ряд стандартных операций для одной таблицы из базы данных. Поэтому там и реализован функционал по удалению и редактированию. QSqlQueryModel позволяет выполнить запр…
VB

Qt/C++ - Lesson 006. QSqlQueryModel – Tables in Qt with SQL-query

Добрый день. Хотел спросить вот что. Создал проект на основе QAbstractTableModel. В MainWindow cоответственно создал модель и связал с представлением. Поиск веду по списку элементов модели,…

QCheckBox в качестве делегата QTableView

До тех пор, пока у вас проект содержит только одну таблицу, или несколько то может быть. Когда их будет 1000 и чекбоксы в разных колонках, то без делегатов и переопределения возвращаемых ре…
D
  • Damir
  • Sept. 20, 2020, 3:34 p.m.

QCheckBox в качестве делегата QTableView

bool Node::setData(const QModelIndex& index, const QVariant& value, int role){ switch (index.column()) { case 0: switch (role) { case Qt::CheckStateRole:// <- т…
Now discuss on the forum
DI

Как в QTableWidget, состоящей из чекбоксов, в строке таблицы можно было выбрать только один checkbox ?

Сделал таблицу состоящую из чекбоксов по уроку https://evileg.com/ru/post/78/ Кто-нибудь знает, как сделать так, чтобы в QTableWidget состоящей из чекбоксов в строке таблицы можно …
U

как скрыть елемент с копии виджета

Удалить пост нельзя... Поэтому удачки, Катту)
H

Тесты падают при сборке под MinGW.

Всем привет! При сборке под MinGW некоторые тесты при старте выдают FATAL "не удалось запустить тест проекта" и подвешивают Qt Creator - приходится его перезапускать. При сборке под MSVC та…

Как в qml работать с динамически созданными потомками?

Спасибо) В Qt/С++ есть функция deleteLater, которую обычно используют, чтобы удалить объекты, которые наследованы от QObject . Она добавлена для того, чтобы не удалять такие…

Как в Qt в qmenu добавить scrollarea

Вот это наследованный класс меню. Но посути это обычное меню. #pragma once#include <QtWidgets>class TransMenu : public QMenu { Q_OBJECTpublic: TransMenu(QWidget* parent = …
About
Services
© EVILEG 2015-2020
Recommend hosting TIMEWEB