s
20 мая 2020 г. 1:08

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

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

3

Вам это нравится? Поделитесь в социальных сетях!

5
Evgenii Legotckoi
  • 21 мая 2020 г. 1:57

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

    s
    • 22 мая 2020 г. 1:09

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

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

      Evgenii Legotckoi
      • 22 мая 2020 г. 12:34

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

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

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

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

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

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

        Docent
        • 25 мая 2020 г. 22:41
        • (ред.)

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

          s
          • 26 мая 2020 г. 0:24

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

            Комментарии

            Только авторизованные пользователи могут публиковать комментарии.
            Пожалуйста, авторизуйтесь или зарегистрируйтесь
            • Последние комментарии
            • Evgenii Legotckoi
              16 апреля 2025 г. 17:08
              Благодарю за отзыв. И вам желаю всяческих успехов!
            • IscanderChe
              12 апреля 2025 г. 17:12
              Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
            • AK
              1 апреля 2025 г. 11:41
              Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
            • Evgenii Legotckoi
              9 марта 2025 г. 21:02
              К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
            • VP
              9 марта 2025 г. 16:14
              Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…