|
Cloudo
|
|
Просмотр больших файлов в RichEdit (аналог Lister в Total'е)24.03.2012, 14:58. Показов 1576. Ответов 1
Метки нет (Все метки)
День добрый.
Стоит задача — написать hex differ на чистом winapi на C / C++ (т.е. графическое приложение наподобие опции "Сравнить по содержимому" в Total Commander'е для бинарных файлов). Один нюанс — программа должна работать с большими файлами (> 4 Гб). Выглядеть это должно примерно как во встроенной утилите Lister, встроенной в тот же Тотал (в режиме hex-отображения, конечно). Неважно какого объема файл открываешь — по вертикальному скроллу должна быть возможность попасть в любую часть файла. Но пока более простая задача — сделать аналог Lister'а. В качестве графического объекта был выбран RichEdit, т.к. нужно будет подсвечивать различия между файлами другим цветом. Для подкачки кусков файла использую маппинг — функции CreateFileMapping / MapViewOfFile. Проблема заключается в том, что я плохо представляю как реализовать незаметную подкачку другого куска (64 кб) и возможность по скроллу перейти в любое место файла. Правильно ли я представляю, как это будет выглядеть: 1). При загрузке файла вычисляем его размер и выставляем диапазон у скролла RichEdit'а как размер файла / 8, т.к. по 8 байт будет в каждой строке. 2). Устанавливаем для RichEdit-объектов собственную процедуру обработки сообщений, где будем отслеживать скролл-сообщения и заменять подкачанный кусок по необходимости. Есть сложности в определении этой необходимости. Например, если мы сейчас находимся по смещению FFFE, и спустимся ещё на пару байт вниз, то нужно подкачать следующий кусок файла, но при этом на экране должны остаться байты по смещениям FFF0, например с предыдущего куска. Предполагаемое решение — памить кусками по 64 кб но по смещениям, не кратным 64 Кб. Например: в анчале программы загружен кусок 0x0000 — 0xFFFF. Если мы переступаем смещение 0xF000, то грузим кусок 0xE000 — x1DFFF. 3). Маппим первые 64 кбайта файла и отображаем на RichEdit'е. Второй вопрос — какие примерные действия над самим RichEdit'ом нужно совершать в обработчике скролл-сообщений? Я слабо представляю как связать скролл с диапазоном в весь файл и вывод куска в RichEdit, чтобы это правильно работало. Cначала делал через ListBox и ручную отрисовку текста. У меня просто подгружался кусок в 64кб, и два листбокса заполнялись 8 (по ширине) на 32 (по высоте) байт. При этом для перехода к следующему 8х32 блоку были обычные кнопки вида "<<" ">>" (была также возможность вбить смещение вручную в edit). При этом новый 64кб кусок подгружался только в случае необходимости. Но такой вариант не устроил по 3 причинам: — обязательно нужны скроллы, причем управление должно осуществляться как с клавиатуры, так и мышой (т.е. стрелка вверх / вниз — на одну строку... PageUp / PageDown — по страницам). — должна быть возможность изменять размер окна (я делал диалогом) — при перерисовке изображение не должно мерцать (насколько я понимаю если использовать не ручную отрисовку, а предоставить ричедиту отрисовываться самому, такой проблемы не будет... либо же использовать двойную буферизацию, но листбокс всё равно не подходит, т.к. нужна навигация, которую пришлось бы писать самому). Надеюсь на Вашу помощь. |
|
| 24.03.2012, 14:58 | |
|
Ответы с готовыми решениями:
1
Просмотр файла (аналог lister TotalCommander) Просмотр больших файлов Не открывает большие файлы (Аналог lister Total commander ) |
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
|
||||
| 25.03.2012, 22:38 | ||||
|
самое простое решение но и самое тормозное считывать предыдущий, текущий и последующий блок (типа кэша) посмотри на файлы проецируемые в память Добавлено через 7 минут проще выводить смешение байтов которые разнятся и значения первого и второго например 0х100 0х00 0х25 и по моему для данных задач RichEdit не подойдет лучше создать свое окно( вот здесь как раз может подойти Документ-Вид)
0
|
||||
| 25.03.2012, 22:38 | |
|
Помогаю со студенческими работами здесь
2
Просмотр больших изображений (в натуральную величину) на форме Просмотр в режиме реального времени (аналог watch -n 1) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|