Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Не понятный глюк с CFile


Автор: knave 29.3.2005, 14:15
NSVS7.1 C++
Читаю файл (через CFile) который лежит в корне диска d:\scheme_1.gif.

Файл открывается, устанавливается позициz 68 байт от конца, дальше пытаюст считать - считывается 0 байт, ни ошибок ни эксцепшенов. Все пучком, а даные не читаются

Код

CFile fFile
EncryptedHeader hd;

fFile.Open(pszEncFileName, CFile::modeRead|CFile::shareDenyWrite);
fFile.Seek(0 - sizeof(EncryptedHeader), CFile::end);
intt iPos = fFile.GetPosition(); - Проверяю позицию, она верная

//sizeof(EncryptedHeader)) = 68 байт - в отладчике так же

if(fFile.Read(&hd, sizeof(EncryptedHeader)) != sizeof(EncryptedHeader) )
  return FALSE;


Захожу внутрь этого вызова, там обычный ::ReadFile , который и выдает такой интересный результат. Считывается именно 0 байт. @ERR ошибок не показывает, эксцепшенов то же никаких.

Вчем рпоблема???

Автор: knave 4.4.2005, 12:19
Разобрался. Подкузьмили MS мне основательно.

Файл открывался нормально, а вот такая конструкция работала не верное.
CFile file;

...

file.Seek(0 - sizeof(EncryptedHeader), CFile::end);
0 - sizeof(EncryptedHeader) - вместо знакового результата получался беззнаковый, так как в 7.1 это sizeof(EncryptedHeader) дает беззнаковый результат. Получалосб что вместо отрицательного смещения у меня дыло оченьболльшое положительное (отрицательное число в беззнаковом представлении).

Пришлось все править на такую конструкцию, с явным преобразованеим типа.
file.Seek(0 - (LONGLONG)sizeof(EncryptedHeader), CFile::end);

в 6.0 file.Seek(0 - sizeof(EncryptedHeader), CFile::end); - это давало знаковы резкльтат

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)