Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Открытие бинарного файла WinApi

57K
13 сентября 2010 года
rusek
16 / / 12.07.2010
Как следует считывать бинарный файл, чтобы при его открытии он выглядел как в тотал командере при сравнении файлов по содержимому? Т.е. в виде блоков по две шестнадцатеричные цифры. И что вообще означает такая запись?

Буду рад любым ссылкам по теме, кроме посыланий на google.com, yandex.ru и т.п.

Скриншот из тотала в комплекте.
297
14 сентября 2010 года
koodeer
1.2K / / 02.05.2009
> Как следует считывать бинарный файл
Да как угодно. Открываете файл, и - вперёд!

> чтобы при его открытии он выглядел как
> Т.е. в виде блоков по две шестнадцатеричные цифры
Показываете считанные данные в нужном вам формате. Можно сделать самому, можно воспользоваться готовыми решениями: http://www.codeproject.com/KB/cpp/frhed.aspx

> И что вообще означает такая запись?
Означает содержимое файла в шестнадцатеричном формате. Инфы мало, но хоть что-то: http://ru.wikipedia.org/wiki/HEX-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80
Показ данных в шестнадцатеричном виде пошёл, думаю, от ассемблеров/дизассемблеров. От себя добавлю, что на некоторых платформах (архитектурах процессора) более удобным является восьмеричное представление ассемблерного кода.

P.S. и при чём тут WinAPI?
57K
14 сентября 2010 года
rusek
16 / / 12.07.2010
> и при чём тут WinAPI?
Думал, что под этими hex-кодами скрывается что-то невообразимое и справиться с этим можно только средствами WinApi.
А так - спасибо за разъяснения.
57K
14 сентября 2010 года
rusek
16 / / 12.07.2010
Возникла проблема при чтении файла. Делаю проецирование его в память:
Код:
HANDLE hFile1, mapping;
char buf[100]; 
hFile1 = CreateFile(filename1, GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ|FILE_SHARE_WRITE,
        NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
mapping = CreateFileMapping(hFile1, 0, PAGE_READWRITE, 0, 0, 0);
if(mapping)
{
    buf = (LPCTSTR)MapViewOfFile(mapping, FILE_MAP_ALL_ACCESS, 0, 0, 100);
    if(buf)
    {
        UnmapViewOfFile(buf);
    }
    CloseHandle(mapping);
}
CloseHandle(hFile1);

По идее в переменной buf должны быть первые 100 символов, но там лишь строка до первого символа с hex-кодом 00.
Как считать файл, независимо от содержания?

Upd:Хотя при считывании в виде обычного файла, все происходит как и задумано
 
Код:
char buff[100];
fp = fopen(filename1, "rb");
if (fp == NULL) {
    perror("Ошибка при открытии \"мойфайл\"");
    return EXIT_FAILURE;
}
res = fread(buff, sizeof(char), 100, fp);
fclose(fp);

Получается проблема конкретно в считывании при проецировании. Как правильно считывать из проекции?
Надо, чтобы загружались файлы до 4 гигов.
7
14 сентября 2010 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: rusek
в переменной buf…лишь строка до первого символа с hex-кодом 00

Как определяете?
А вообще,

 
Код:
buf = [COLOR="Red"](LPCTSTR)[/COLOR]MapViewOfFile(mapping, FILE_MAP_ALL_ACCESS, 0, 0, 100);
Может быть,дело в этом,нэ?
57K
14 сентября 2010 года
rusek
16 / / 12.07.2010
> Как определяете?
Открываю файл в hex-редакторе и сравниваю с тем, что получил при чтении
из проекции
> Может быть,дело в этом,нэ?
К какому типу тогда приводить, если ни к LPCTSTR?
7
14 сентября 2010 года
@pixo $oft
3.4K / / 20.09.2006
На самом деле я спрашивал,как вы определяете содержимое buf.Отладчик,MessageBox,etc…

Вы для какой цели приводите?
57K
14 сентября 2010 года
rusek
16 / / 12.07.2010
Отладчик.

> Вы для какой цели приводите?
Нужно будет работать с текстовым представлением файла. Если не приводить - вылезет ошибка при компиляции.
14
15 сентября 2010 года
Phodopus
3.3K / / 19.06.2008
Вы неправильно понимаете концепцию отображаемых файлов. Буфер там не нужен, его системы выделяет сама. Если вы хотите получить первые 100 байт файла в буфер, вставьте memcpy(buf, pmap, 100) после MapViewOfFile().
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог