s
sander-00719 травня 2020 р. 15:08

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

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

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

5
Evgenii Legotckoi
  • 20 травня 2020 р. 15:57

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

    s
    • 21 травня 2020 р. 15:09

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

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

      Evgenii Legotckoi
      • 22 травня 2020 р. 02:34

      Ну с самим 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() , то данные полностью не будут уложены на физический диск.
      Попробуйте создавать такой файл с маппингом, работать с ним, а потом просто очищать и удалять.
      В данном случае, предполагаю, что у вас будет создаваться файл на физическом диске, но вы сможете поработать с ним в памяти, возможно также, как работали с ним до этого.

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

        Docent
        • 25 травня 2020 р. 12:41
        • (відредаговано)

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

          s
          • 25 травня 2020 р. 14:24

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

            Коментарі

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

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:50бали,
            • Рейтинг балів-4
            m
            • molni99
            • 26 жовтня 2024 р. 01:37

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:80бали,
            • Рейтинг балів4
            m
            • molni99
            • 26 жовтня 2024 р. 01:29

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:20бали,
            • Рейтинг балів-10
            Останні коментарі
            ИМ
            Игорь Максимов22 листопада 2024 р. 11:51
            Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
            Evgenii Legotckoi
            Evgenii Legotckoi31 жовтня 2024 р. 14:37
            Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
            A
            ALO1ZE19 жовтня 2024 р. 08:19
            Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
            ИМ
            Игорь Максимов05 жовтня 2024 р. 07:51
            Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
            d
            dblas505 липня 2024 р. 11:02
            QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            Тепер обговоріть на форумі
            Evgenii Legotckoi
            Evgenii Legotckoi24 червня 2024 р. 15:11
            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
            t
            tonypeachey115 листопада 2024 р. 06:04
            google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
            NSProject
            NSProject04 червня 2022 р. 03:49
            Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
            9
            9Anonim25 жовтня 2024 р. 09:10
            Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

            Слідкуйте за нами в соціальних мережах