Сейчас на форуме: tyns777 (+6 невидимых) |
eXeL@B —› Вопросы новичков —› Вывести текст из памяти в EDIT CONTROL |
Посл.ответ | Сообщение |
|
Создано: 18 августа 2019 21:08 · Личное сообщение · #1 Привет может здесь сможет мне кто то помочь. Столкнулся с такой странной проблемой. Пишу проект на MFC. Мне нужно что бы при открытии любого файла определенные его участки можно было просмотреть в текстовом формате. Поместил на диалоговое окно EDIT CONTROL. Попробовал данный код Code:
С текстовыми файлами все в порядке,но вот с любыми исполняемыми файлами странный глюк. Текст выводится только одной маленькой начальной строчкой, остальное игнорируется. Если начать считывать файл с произвольного места, то опять короткая строчка и все. Как я понял в основном затыкается на пробелах строк. Как такое происходит? Я уже голову сломал над этим! |
|
Создано: 18 августа 2019 21:11 · Личное сообщение · #2 |
|
Создано: 18 августа 2019 21:29 · Личное сообщение · #3 f13nd пишет: Вероятно выводится до первого нуля-терминатора, editbox это про строки, они нулем заканчиваются. D В текстовых файлах такого нет. Там по идее те же строки.Я вам больше скажу, если открыть файл в блокноте а потом сохранить его выбрав ту же кодировку, то все работает все прекрасно читается. Правда сам файл становится не рабочим. Что блокнот то делает такое? |
|
Создано: 18 августа 2019 21:37 · Личное сообщение · #4 zombi-vadim пишет: Что блокнот то делает такое? Заменяет все нули на пробелы Code:
----- 2 оттенка серого |
|
Создано: 18 августа 2019 21:40 · Поправил: VOLKOFF · Личное сообщение · #5 |
|
Создано: 18 августа 2019 21:43 · Личное сообщение · #6 |
|
Создано: 18 августа 2019 21:51 · Личное сообщение · #7 zombi-vadim пишет: А вот edit control при приеме видит ноль, считает что это конец текста и обрывает его? Все текстовые функции, использующиеся в этом контроле, не видят дальше нуля. По-моему только в творениях борланда строки не так кодируются, но это совсем другая история. VOLKOFF пишет: бинарные файлы просматриваются в hex эдиторах, а не текстовых редакторах? Годней всего смотреть бинарные файлы в паинте, надо только bmp-заголовок для них правильный сформировать и смотреть снизу вверх. ----- 2 оттенка серого |
|
Создано: 18 августа 2019 21:54 · Личное сообщение · #8 |
|
Создано: 18 августа 2019 22:03 · Личное сообщение · #9 zombi-vadim пишет: Так мне то как поступить?Все конец проекта Если у тебя появилась нужда выводить ехе файлы в эдитбокс, значит в одном из предыдущих этапов выбрал не то направление развития проекта. ----- 2 оттенка серого | Сообщение посчитали полезным: zombi-vadim |
|
Создано: 18 августа 2019 22:09 · Личное сообщение · #10 Спасибо вам за разъяснение, а то на другом форуме меня послали менять кодировки, я кучу времени потратил пока понял что это не то. Все же если у кого есть какие то идеи как мне поступить буду рад их прочитать. Добавлено спустя 15 минут f13ndЯ вот посмотрел в hex эдиторе файл. Он же как то интерпретирует строчки, во втором поле он выводит текстовую символьную информацию, заменяя определенные значения точками. Как он различает где символ а где ноль? там есть такие варианты как 01 или 10 или 0е.Там точки стоят а вот например 40 там символ? |
|
Создано: 18 августа 2019 22:30 · Личное сообщение · #11 Нех-редактор в текстовой части не выводит данные напрямую, а интерпретирует их, заменяя непечатные символы чем-нибудь. Там обычно не editbox, а самопальный контрол на listview или полностью самопальный. Можно наверное засабклассить и эдитбокс фильтруя налету и таки выводить в него, но по-моему сама затея очень странная. ----- 2 оттенка серого |
|
Создано: 18 августа 2019 22:36 · Личное сообщение · #12 |
|
Создано: 18 августа 2019 22:39 · Личное сообщение · #13 https://docs.microsoft.com/en-us/windows/win32/winmsg/wm-settext Примерно к этому сводится вывод строки в едит, один аргумент - null-terminated string, длину строки никуда не сунешь. Можешь добавить свой обработчик сообщения, который выделит новый буфер, скопирует в него и заменит там, либо сразу в буфере заменит и WM_SETTEXT передаст контролу. Но это как бы нормально сработает в режиме только чтения, если продолжать безумствовать в сторону редактирования ехе файла в блокноте, придется усложнять. Добавлено спустя 1 минуту zombi-vadim пишет: Блокнот например видит отдельные символы и считает их печатными только выводит крокозяблы. Блокноту пофигу, он просто заменяет нули в буфере на входе и отдает едиту как бааальшущую строку. ----- 2 оттенка серого | Сообщение посчитали полезным: zombi-vadim |
|
Создано: 18 августа 2019 22:56 · Личное сообщение · #14 |
|
Создано: 20 августа 2019 09:40 · Личное сообщение · #15 zombi-vadim Если ты хочешь сделать вывод содержимого файла в читабельном виде, а не для редактирования, то используй вывод hex-последовательности. Самый примитивный способ: выводить через sprintf. 1. Сначала выводишь заголовок: " 0 1 2 3 4 5 6 7 8 9 A B C D E F" 2. Потом с помощью sprintf выводишь последовательно байты в hex блоками по 16 байт. Шрифт используй моноширинный, чтобы все символы были выровнены. Читай: - - ----- EnJoy! |
eXeL@B —› Вопросы новичков —› Вывести текст из памяти в EDIT CONTROL |