Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2013, 01:46   #1
New_Subscriber
Новичок
Джуниор
 
Регистрация: 17.11.2013
Сообщений: 2
По умолчанию Чтение бинарного файла в MFC

Добрый вечер!
Столкнулся со следующей проблемой:
Есть бинарный файл:
1246c1e8fc0b.jpg
Нужно найти найти в нем байты 0хЕ3 и выполнить определенные операции (например, вывести вывести окно "!!!!")
Открываю файл и читаю его данные в буфер:
Код:
// Открываем файл с данными
char buff [100002];
DWORD readbytes=GetFileSize(_T("TestFile.dat"),NULL);
DWORD tmp;
ReadFile(_T("TestFile.dat"), buff, readbytes, &tmp, NULL);
 
if (buff[0]==0xE3)
    AfxMessageBox(_T("!!!!"));
Однако данные читаются неправильно.
Я точно знаю, что 0-й байт равен 0хЕ3, но окно не выводится.
Почему данные читаются неправильно?

Последний раз редактировалось New_Subscriber; 17.11.2013 в 02:21.
New_Subscriber вне форума Ответить с цитированием
Старый 17.11.2013, 11:00   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Код:
// Открываем файл с данными
char buff [100002];
DWORD readbytes=GetFileSize(_T("TestFile.dat"),NULL);
DWORD tmp;
ReadFile(_T("TestFile.dat"), buff, readbytes, &tmp, NULL);
 
if (buff[0]==0xE3)
    AfxMessageBox(_T("!!!!"));
из MFC здесь только AfxMessageBox... этот код компилируется?

и что-то я не вижу, где вы открываете файл...
counter вне форума Ответить с цитированием
Старый 19.11.2013, 22:35   #3
bedouin
Пользователь
 
Регистрация: 05.01.2012
Сообщений: 27
По умолчанию

Как это не парадоксально, но файл компилируется.
Подправил код следующим образом:
Код:
// Открываем файл с данными
char buff [100002];
DWORD readbytes=GetFileSize(_T("TestFile.dat"),NULL);
DWORD tmp;
HANDLE tFile;
tFile=CreateFile(_T("TestFile.dat"), GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
ReadFile(tFile, buff, readbytes, &tmp, NULL);

if (buff[0]==0xE3)
{AfxMessageBox("0");}
if (buff[1]==0xE3)
{AfxMessageBox("1");}
if (buff[2]==227)
{AfxMessageBox("2");}
if (buff[3]==0x8A)
{AfxMessageBox("3");}
if (buff[4]==0x06)
{AfxMessageBox("4");}
if (buff[5]==0)
{AfxMessageBox("5");}
else
{AfxMessageBox("???");}
Получаю окошко "???"

Если переписать код как:
Код:
// Открываем файл с данными
char buff [100002];

CFile testFile;
testFile.Open("TestFile.dat", CFile::modeRead | CFile::typeBinary);
DWORD S = GetFileSize(testFile,NULL);
testFile.Read(buff,S);

if (buff[0]==0xE3)
{AfxMessageBox("0");}
if (buff[1]==0xE3)
{AfxMessageBox("1");}
if (buff[2]==227)
{AfxMessageBox("2");}
if (buff[3]==0x8A)
{AfxMessageBox("3");}
if (buff[4]==0x06)
{AfxMessageBox("4");}
if (buff[5]==0)
{AfxMessageBox("5");}
else
{AfxMessageBox("???");}

testFile.Close();
То уже получаю "4" и "5".
То есть проблема где-то в чтении байт. записанных в шестнадцатиричной форме.
Видно где-то чего-то не дописал.
P.S.: Если убрать "CFile::typeBinary", результат тот же.
bedouin вне форума Ответить с цитированием
Старый 19.11.2013, 23:28   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
То есть проблема где-то в чтении байт. записанных в шестнадцатиричной форме.
Проблема не в чтении данных, а в не прочтении документации: CFile


Кто Вас вразумил на такое?

Цитата:
DWORD S = GetFileSize(testFile,NULL);
DWORD readbytes=GetFileSize(_T("TestFile. dat"),NULL);
Для получения длины файла, представленного объектом MFC CFile используйте метод CFile::GetLength, для установки позиции чтения CFile::Seek, CFile::SeekToBegin или CFile::SeekToEnd.

WinAPI функция GetFileSize не принимает первым параметром текстовую строку!
counter вне форума Ответить с цитированием
Старый 20.11.2013, 23:57   #5
bedouin
Пользователь
 
Регистрация: 05.01.2012
Сообщений: 27
По умолчанию

Записал вместо
Код:
char buff [100002];
Код:
unsigned  char buff [100002];
Все заработало как надо
bedouin вне форума Ответить с цитированием
Старый 21.11.2013, 00:00   #6
New_Subscriber
Новичок
Джуниор
 
Регистрация: 17.11.2013
Сообщений: 2
По умолчанию

bedouin
Спасибо за подсказку
New_Subscriber вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из бинарного файла в С++ ArmanPrestige Общие вопросы C/C++ 10 15.07.2012 21:36
Чтение из бинарного файла lioc C# (си шарп) 10 20.02.2012 21:12
чтение бинарного файла Snake22 Общие вопросы Delphi 1 23.01.2012 07:44
чтение из бинарного файла Kukurudza Общие вопросы C/C++ 6 08.09.2011 19:09
Чтение из бинарного файла. kir_rik Помощь студентам 2 04.06.2010 00:31