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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2011, 10:24   #1
skill_
 
Регистрация: 13.05.2011
Сообщений: 7
По умолчанию MFC: CFile::Read возвращает странные значения

Код:
UINT blockSize = 1024;
double *tempValue = new double[blockSize];
UINT readBytes = file.Read(tempValue, 8*blockSize);
pos = file.GetPosition();
В итоге: readBytes = случайное число(каждый раз разное)
pos - увеличивается на 8192(дело происходит в цикле).

Вопрос простой КАК ТАК????
Файл открыт так:
Код:
file.Open(fileName, CFile::modeReadWrite, &exception)
skill_ вне форума Ответить с цитированием
Старый 09.06.2011, 13:08   #2
Scaevola
Пользователь
 
Аватар для Scaevola
 
Регистрация: 08.06.2011
Сообщений: 25
По умолчанию

Я что-то не пойму вопроса.UINT readBytes = file.Read(tempValue, 8*blockSize); будет возвращать случайное число.А pos будет увеличиваться на 8192 (8*1024).Что тебе вообще нужно сделать?
Scaevola вне форума Ответить с цитированием
Старый 09.06.2011, 13:28   #3
Scaevola
Пользователь
 
Аватар для Scaevola
 
Регистрация: 08.06.2011
Сообщений: 25
По умолчанию

И зачем объявлять динамический массив типа double?
Scaevola вне форума Ответить с цитированием
Старый 09.06.2011, 14:47   #4
skill_
 
Регистрация: 13.05.2011
Сообщений: 7
По умолчанию

Нужно файл считать порциями по blockSize.
Спрашивается какого Read() возвращает нечто несуразное, хотя, по идее должен выдавать количество считанных байт, поскольку очевидно что конец файла не достигнут, раз pos принимает верное значение.

Последний раз редактировалось skill_; 09.06.2011 в 14:56.
skill_ вне форума Ответить с цитированием
Старый 10.06.2011, 09:03   #5
skill_
 
Регистрация: 13.05.2011
Сообщений: 7
По умолчанию

Решение нейдено, заключается в том чтобы открывать файл с параемтром CFile::typeBinary, поскольку иначе CStdioFile чувствителен к последовательностям символа конца строки и перевода каретки.
Как ни странно об этом практически ничего не сказано в документации.
Кстати тоже самое касается записи double - если не указать CFile::typeBinary - в файле получается ерунда.
skill_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно написать функцию, что не возвращает значения(типа процедуры на паскале) karson Общие вопросы C/C++ 2 13.03.2011 15:41
Random возвращает одни и те же значения pa6kevi4 Общие вопросы .NET 6 22.05.2010 23:27
Запрос возвращает пустую таблицу, если один из подзаросов возвращает пустую таблицу ArtInt SQL, базы данных 9 12.05.2010 15:40
Функция не возвращает значения 2.0 Winlook PHP 1 10.05.2010 00:58
Exel 2007 не возвращает значения DATE NameX Microsoft Office Excel 10 03.02.2010 11:40